我正在Laravel中进行Ratchet(http://socketo.me/)的实时聊天项目。一切对我来说都很好,但是在我的域上安装SSL证书后,websocket无法连接到websocket服务器。我自己在专用服务器上使用WHM构建了cpanel,并安装了require模块。
我在服务器端口上运行的server.php文件代码为
$server = IoServer::factory(
new HttpServer(
new WsServer(
new ChatSocket()
)
),
8080
);
$server->run();
所有代码都在其中运行,保存和检索数据的我的ChatSocket类,
class ChatSocket implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
//store the new connection
$this->clients->attach($conn);
echo "someone connected\n";
}
public function onMessage(ConnectionInterface $from, $msg) {
//send the message to all the other clients except the one who sent.
foreach ($this->clients as $client) {
if ($from !== $client) {
$client->send($msg);
}
}
}
public function onClose(ConnectionInterface $conn) {
$this->clients->detach($conn);
echo "someone has disconnected";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}
当我尝试使用下面的代码连接http时,对我来说很好用。
var conn = new WebSocket('ws://mydomain.com:8080');
但是当我实现SSL证书并将ws://更改为wss://时,它对我不起作用,如下所示,
var conn = new WebSocket('wss://mydomain.com:8080');
我也在此平台上进行搜索,并尝试了许多解决方案以使其运行,在服务器上设置ProxyPass,并通过在服务器的httpd.conf文件中放置以下代码来尝试与ProxyPass连接,但它对我也不起作用。我也为ProxyPass加载了模块,
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule mod_proxy.c>
<IfModule mod_proxy_ajp.c>
ServerName www.mydomain.com
ProxyRequests On
ProxyVia On
ProxyPass /_ws_ ws://mydomain.com:8080
ProxyPassReverse /_ws_ ws://mydomain.com:8080
</IfModule>
</IfModule>
添加此内容后,我重新启动了httpd文件并重新启动了完整服务器,以确认apache服务器已重新启动。
请帮助我通过SSL与websocket建立连接。
我的问题是