直接说我自己遇到的情况吧,
之前 workerman-chat 一直部署在 http 环境下,因为需要内嵌包到微信小程序,域名调整为 https
那么问题来了, https 是不加载 http 的资源的,ws 的志愿同样也是不能使用.
我的环境是 nginx 网站已经配置好ssl 了,这里就不介绍 ssl 配置了,下面就直接以workerman-chat 的demo来讲吧
解决办法 大概 2步:
1.nginx配置:新增
目的是将 wss 转发到 http://127.0.0.1:7272
location /wss {
proxy_pass http://127.0.0.1:7272;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_connect_timeout 5s; #配置点1
proxy_read_timeout 60000s; #配置点2,如果没效,可以考虑这个时间配置长一点
proxy_send_timeout 60000s; #配置点3
}
2.修好 web/index.php Websocket配置信息
一定记得 后面加 域名后面加/wss 像下面这样
将 ws = new WebSocket("ws://ss.sss.com:7272");
修改为:
ws = new WebSocket("wss://ss.sss.com/wss"); //修改这个地址
// 如果浏览器不支持websocket,会使用这个flash自动模拟websocket协议,此过程对开发者透明
WEB_SOCKET_SWF_LOCATION = "/swf/WebSocketMain.swf";
// 开启flash的websocket debug
WEB_SOCKET_DEBUG = true;
var ws, name, client_list = {};
// 连接服务端
function connect() {
// 创建websocket
ws = new WebSocket("wss://你的域名/wss");
// 当socket连接打开时,输入用户名
ws.onopen = onopen;
// 当有消息时根据消息类型显示不同信息
ws.onmessage = onmessage;
ws.onclose = function() {
console.log("连接关闭,定时重连");
connect();
};
ws.onerror = function() {
console.log("出现错误");
};
}