服務(wù)器是阿里云的centOS。開(kāi)了一個(gè)4431的端口,并在nginx.conf中server加入了listen 4431;的監(jiān)聽(tīng)。然后根據(jù)wokerman手冊(cè)上面的wss教程,在服務(wù)器端start.php中代碼如下:
$context = array(
'ssl' => array(
// 使用絕對(duì)路徑
'local_cert' => '/usr/local/nginx/cert/xxxxxxxxxx.pem', // 也可以是crt文件
'local_pk' => '/usr/local/nginx/cert/xxxxxxxxxx.key',
'verify_peer' => false,
)
);
// 這里設(shè)置的是websocket協(xié)議
$worker = new Worker('websocket://0.0.0.0:4431', $context);
// 設(shè)置transport開(kāi)啟ssl,websocket+ssl即wss
$worker->transport = 'ssl';
$worker->onMessage = function($con, $msg) {
$con->send('ok');
};
Worker::runAll();
其中證書(shū)是阿里云上申請(qǐng)的CA證書(shū)。因?yàn)橐M(jìn)行https化,所以在nginx配置中也加入了單獨(dú)的項(xiàng)目配置,對(duì)443進(jìn)行了監(jiān)聽(tīng)。此時(shí)https訪(fǎng)問(wèn)域名www.weilinke.cn 是沒(méi)問(wèn)題的。也有綠色安全標(biāo)識(shí)。可是進(jìn)行聊天端口連接時(shí)報(bào)錯(cuò):WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR。
其中https使用的證書(shū)就是wokerman使用的xxxxxxx.pem和xxxxxxx.key。兩者的路徑是一致的。求大神指點(diǎn)迷津。
開(kāi)了一個(gè)4431的端口,并在nginx.conf中server加入了listen 4431;
workerman開(kāi)SSL用不到nginx,你這里nginx監(jiān)聽(tīng)了4431,workerman也監(jiān)聽(tīng)了4431是不對(duì)的。
workerman開(kāi)SSL就是你上面的代碼就可以了,和nginx沒(méi)有任何關(guān)系。
刪掉nginx的431監(jiān)聽(tīng)代碼。還是報(bào)錯(cuò):(index):161 WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED。根據(jù)這個(gè)問(wèn)題,我去阿里云的安全組-添加了新的公網(wǎng)出方向:端口范圍4431/4431,授權(quán)對(duì)象0.0.0.0/0。依舊無(wú)效~
是因?yàn)樵贏(yíng)pplication/core下的start_gateway.php嗎?我看這里面有個(gè)$gateway = new Gateway("websocket://0.0.0.0:8282");所以wokerman并沒(méi)有監(jiān)聽(tīng)到4431端口,所以拒絕連接嗎?因?yàn)槭切率?,也是第一次?duì)接wokerman,以前wokerman代碼是其他同事寫(xiě)好的,所以很多不懂得,還請(qǐng)不要見(jiàn)怪。
多謝,已解決。原來(lái)每次修改代碼都要重新啟動(dòng)一下wokerman才行。我每次修改之后,只更新了代碼,沒(méi)有重啟wokerman,所以一直失敗~