我在一个基于 Windows 的服务器项目中使用 Ratchet WebSocket,该项目完全在不安全的环境中工作。也就是说,当我将浏览器导航到
http://www.example.com
并在端口 8686 上使用 ws://
连接到 websocket 服务器时,一切都运行得非常好。
服务器不通过 IIS 运行 - 而是通过命令提示符中的 php.exe 执行,如下所示。
php wsocket-server.php [...parameters...]
但是,如果运行 Ratchet 服务器并尝试使用
https://www.example.com
从 wss://
连接,则浏览器根本无法连接到 Websocket 服务器,尽管服务器启动良好并且站点不安全并通过 ws://
连接
现在,我意识到我需要使用一些额外的代码来包含我的 SSL 文档。这是我现有的相关代码:
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
$websocket_server = new WsServer();
if ($site_secure){
//RUN WSS (SECURE) SERVER
$options = [
'local_cert' => 'c:\inetpub\ssl\2c6fa1928847451c.crt',
'local_pk' => 'c:\inetpub\ssl\2c6fa1928847451c.key',
'allow_self_signed' => true,
'verify_peer' => false
];
$loop = React\EventLoop\Factory::create();
$websocket_server->enableKeepAlive($loop);
$app = new HttpServer($websocket_server);
$insecure_websockets = new \React\Socket\Server('0.0.0.0:'.$port, $loop);
$secure_websockets = new \React\Socket\SecureServer($insecure_websockets , $loop, $options);
$secure_websockets_server = new \Ratchet\Server\IoServer($app, $secure_websockets, $loop);
$secure_websockets_server->run();
}else{
//RUN WS (INSECURE) SERVER
$http_server = new HttpServer($websocket_server);
$server = IoServer::factory($http_server, $port);
$websocket->log ("Initializing ".(($site_secure) ? "Secure " : "Insecure ")."Server ($port)");
$server->run();
}
netstat
我希望有人能帮助我解决一个困扰我两周的问题。在这一点上,我觉得我只是在尝试一些事情,而且我可能会在圈子里编码自己。
提前谢谢您。
嗯,我不是 100% 确定,但马上看起来 $site_secure 是未定义的。我希望这有帮助。