服务器是阿里云的centOS。开了一个4431的端口,并在nginx.conf中server加入了listen 4431;的监听。然后根据wokerman手册上面的wss教程,在服务器端start.php中代码如下:
$context = array(
'ssl' => array(
// 使用绝对路径
'local_cert' => '/usr/local/nginx/cert/xxxxxxxxxx.pem', // 也可以是crt文件
'local_pk' => '/usr/local/nginx/cert/xxxxxxxxxx.key',
'verify_peer' => false,
)
);
// 这里设置的是websocket协议
$worker = new Worker('websocket://0.0.0.0:4431', $context);
// 设置transport开启ssl,websocket+ssl即wss
$worker->transport = 'ssl';
$worker->onMessage = function($con, $msg) {
$con->send('ok');
};
Worker::runAll();
其中证书是阿里云上申请的CA证书。因为要进行https化,所以在nginx配置中也加入了单独的项目配置,对443进行了监听。此时https访问域名www.weilinke.cn 是没问题的。也有绿色安全标识。可是进行聊天端口连接时报错:WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR。
其中https使用的证书就是wokerman使用的xxxxxxx.pem和xxxxxxx.key。两者的路径是一致的。求大神指点迷津。
workerman开SSL用不到nginx,你这里nginx监听了4431,workerman也监听了4431是不对的。
workerman开SSL就是你上面的代码就可以了,和nginx没有任何关系。
删掉nginx的431监听代码。还是报错:(index):161 WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED。根据这个问题,我去阿里云的安全组-添加了新的公网出方向:端口范围4431/4431,授权对象0.0.0.0/0。依旧无效~
是因为在Application/core下的start_gateway.php吗?我看这里面有个$gateway = new Gateway("websocket://0.0.0.0:8282");所以wokerman并没有监听到4431端口,所以拒绝连接吗?因为是新手,也是第一次对接wokerman,以前wokerman代码是其他同事写好的,所以很多不懂得,还请不要见怪。
你找下你们其它同事给你弄吧
@1:- - 他们不会哟。ws没毛病,就是wss不会弄来着~~~
多谢,已解决。原来每次修改代码都要重新启动一下wokerman才行。我每次修改之后,只更新了代码,没有重启wokerman,所以一直失败~