在应用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。
有人解决了我的问题。所以我在这里发布解决方案以帮助其他人。我犯了两个错误。
所以这里是使用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();
}
Cloudflare不适用于端口8090
,here是cloudflare支持的端口列表。
还可以尝试使用http://sitemeer.com/#https://yourDomain:8090
查看您的服务器+域是否正在服务ssl