在应用ssl(我从cloudflare取得)之前,我的网站是通过http加载的,而我的套接字连接是通过ws建立的 一切正常,连接成功。
conn = new WebSocket('ws:// myDomain:8090');
但是当我的网站通过https加载时应用ssl后,我使用wss(否则会出错)
conn = new WebSocket('wss:// myDomain:8090');
现在它给了我错误
与'wss:// myDomain:8090 /'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_TIMED_OUT
websocket服务器是通过8090端口启动的,我也将端口更改为9991,但无济于事。
这是Websocket服务器的代码
public function handle()
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new WebSocketController()
)
),
8090
);
$server->run();
}
我未配置apache来运行websocket服务器以接受安全连接请求。可能是由于此原因导致我出错了。这意味着我正在向不安全的websocket服务器发送安全连接请求。如果我是对的,您能告诉我如何配置我的Websocket服务器,以便它可以接受安全连接请求。
我再次告诉您,我正在使用来自云技术的SSL。我告诉我自己的域名,他们为我提供了域名服务器,用我现有的域名服务器替换了域名服务器。
我要求您提供明确的解决方案以解决此问题。 我不使用nginx,而是在Lampp上使用apache。
答案 0 :(得分:0)
Cloudflare不适用于端口8090
,here是cloudflare支持的端口列表。
还尝试http://sitemeer.com/#https://yourDomain:8090
来查看您的服务器+域是否正在提供ssl
答案 1 :(得分:0)
有人解决了我的问题。因此,我在这里发布解决方案以帮助他人。我犯了两个错误。
这是使用Ratchet在Laravel中为wss配置websocket服务器的代码
public function handle()
{
$loop = Factory::create();
$webSock = new SecureServer(
new Server('0.0.0.0:8090', $loop),
$loop,
array(
'local_cert' => '', // path to your cert
'local_pk' => '', // path to your server private key
'allow_self_signed' => TRUE, // Allow self signed certs (should be false
in production)
'verify_peer' => FALSE
)
);
// Ratchet magic
$webServer = new IoServer(
new HttpServer(
new WsServer(
new WebSocketController()
)
),
$webSock
);
$loop->run();
}