Php WebSocket不能在TLS/SSL上工作,但在没有TLS/SSL的情况下可以工作

Php WebSocket不能在TLS/SSL上工作,但在没有TLS/SSL的情况下可以工作,php,websocket,ratchet,Php,Websocket,Ratchet,我终于有时间学习web套接字,并选择使用它:这样做。在没有SSL的情况下,这一切都可以正常工作。一旦启用,客户端javascript将无法连接,并将输出“WebSocket打开握手超时”。我已经试过使用和不使用TLS选项的服务器 client.html、post.php、server.php var conn=新ab.Session('wss://domain.com:8443', 函数(){ console.log('Connected'); conn.subscribe('kittensC

我终于有时间学习web套接字,并选择使用它:这样做。在没有SSL的情况下,这一切都可以正常工作。一旦启用,客户端javascript将无法连接,并将输出“WebSocket打开握手超时”。我已经试过使用和不使用TLS选项的服务器

client.html、post.php、server.php


var conn=新ab.Session('wss://domain.com:8443',
函数(){
console.log('Connected');
conn.subscribe('kittensCategory',函数(主题,数据){
//这是将新文章添加到DOM的地方(超出本教程的范围)
log('新文章发布到类别“'+主题+”:'+数据.title);
});
},
函数(){
console.warn('WebSocket连接关闭');
},
{'SkipUpProtocolCheck':true}
);
解决方案:

为了让客户端通过SSL工作,您需要设置服务器证书和私钥,并按如下方式启动安全服务器

$loop=React\EventLoop\Factory::create();
$pusher=新的MyApp\pusher;
//侦听web服务器在ajax请求后进行ZeroMQ推送
$context=newreact\ZMQ\context($loop);
$pull=$context->getSocket(ZMQ::SOCKET\u pull);
$pull->bind($pull)tcp://127.0.0.1:5555'); // 绑定到127.0.0.1意味着唯一可以连接的客户端是它自己
$pull->on('message',[$pusher,'onUpdate']);
//为需要实时更新的客户端设置我们的WebSocket服务器
$webSock=new React\Socket\Server('0.0.0.0:8443',$loop);
$webSock=new React\Socket\SecureServer($webSock,$loop[
'local_cert'=>'C:/xampp/apache/conf/ssl.crt/server.crt',//证书的路径
'local_pk'=>'C:/xampp/apache/conf/ssl.key/server.key',//服务器私钥的路径
'allow_self_signed'=>TRUE,//允许自签名证书(在生产中应为false)
“验证对等方”=>错误
]);
//$webSock->listen(8443,'0.0.0');//绑定到0.0.0.0意味着远程设备可以连接
$webServer=新棘轮\Server\IoServer(
新棘轮\Http\HttpServer(
新建Ratchet\WebSocket\WsServer(
新棘轮\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
请看这里:

您的服务器上有证书吗?是的,我有,由LetsEncrypt颁发的有效证书。