swoole websocket 支持ssl 修改成https最终解决办法
使用的宝塔面板网站开启了SSL后发下ws和https存在兼容性问题,会被提示不安全的WebSocket链接无法通过https加载页面启动;
之前项目正常可用,自从安装了SSL后出现了这个问题,于是百度下发现一般有两种解决办法,一种是反向代理,一种就是swoole支持ssl直接改文件就可以完成了!这里使用最简单的方法,修改SWOOLE;
先使用命令测试 php --ri swoole
可以看到 openssl => OpenSSL 1.0.2u... 这样的提示证明swoole已经开启了openssl-ssl,直接修改代码即可。
创建websocket服务:
1 2 3 4 5 6 7 8 9 10 |
$ws = new Swoole\WebSocket\Server('0.0.0.0', 49911,SWOOLE_PROCESS,SWOOLE_SOCK_TCP | SWOOLE_SSL); $ws->set(array( 'ssl_cert_file' => __DIR__.'/data/5030462_www.21863.cn.pem', 'ssl_key_file' => __DIR__.'/data/5030462_www.21863.cn.key', )); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { var_dump($request); echo "用户客户端ID:".$request->fd.'---->'; }); |
其中的5030462_www.21863.cn.pem和5030462_www.21863.cn.key是你申请的网站SSL,在你申请的地方直接下载服务器对应版本上传到网站中即可(这里路径不正确还是无法链接成功)
最后客户端,将连接换为wss即可
1 2 3 4 5 6 7 8 9 10 11 |
var wsServer = 'wss://www.21863.cn:49911'; var websocket = new WebSocket(wsServer); websocket.onopen = function (evt) { console.log("Connected to WebSocket server."); if (websocket.readyState == 1) { console.log('WebSocket 连接成功...'); } else { //layer.msg('服务器链接失败,请确认 WebSocket 是否开启'); console.log('WebSocket 连接失败...'); } }; |
至此搞定了。