【发布时间】:2022-12-15 05:58:02
【问题描述】:
我在基于 Windows 的服务器项目中使用 Ratchet WebSocket,该项目完全在不安全的环境中工作。也就是说,当我将浏览器导航到 http://www.example.com 并使用端口 8686 上的 ws:// 连接到 websocket 服务器时,一切都运行得非常好。
服务器不通过 IIS 运行 - 而是通过命令提示符下的 php.exe 执行,如下所示。
php wsocket-server.php [...parameters...]
但是,如果运行 Ratchet 服务器并尝试使用 wss:// 从 https://www.example.com 连接,浏览器将不会连接到 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();
}
我试过的
- 我已确保正确的端口在 Windows 防火墙中全部打开。
- 我已经确保没有其他东西在使用
netstat监听端口 - 我尝试过在最低限度上使用 nginx。如果可能的话,我宁愿不使用这种方法,而且它在启动时遇到了一些初始问题,所以我现在没有 100% 地投入到它中。理想情况下,我想使用 Ratchet 的原生能力。
- 我在这里和其他地方搜索过其他类似的帖子,例如this。
- 我尝试了很多不同的端口,甚至是我在不安全连接中使用的相同的 8686
我希望有人可以帮助我解决一个让我发疯 2 周的问题。在这一点上,我觉得我只是在尝试一些事情来尝试它们,我可能会在圈子里编码自己。
先感谢您。
【问题讨论】: