“使用自签名 SSL 与 'wss://localhost:80/' 的 WebSocket 连接失败”

问题描述 投票:0回答:1

我正在尝试使用 Workerman 库创建自己的 websocket 并将我的前端部分与服务器连接。我正在使用 Apache2 来运行它。

那么,让我们看看它是什么样子的:

$worker = new Worker('websocket://127.0.0.1:80');

$worker->onMessage = function($connection, $data) use($worker) {
    foreach($worker->connections as $clientConnection) {
        $clientConnection->send('Hello World');
    }
};

Worker::runAll();
let socket = new WebSocket('wss://localhost:80');

没什么特别的,只是应该这样做。至少在我看来。

我打开地址页面没有问题:

https://localhost/websocket/test.html

但是,我在浏览器 JS 控制台上收到错误:

WebSocket connection to 'wss://localhost:80/' failed

好吧,ofc,我尝试了人们在类似主题下推荐的许多不同方法来修复它。

我尝试打开地址为“127.0.0.1”而不是“localhost”的页面。一样的东西。我尝试在 JS 代码中将连接地址中的 'localhost' 更改为 '127.0.0.1' - 仍然没有任何变化。

我的自签名 SSL 证书工作正常,尽管浏览器告诉我连接不安全。至少我可以忽略它并打开页面。尽管如此,页面仍无法连接到 websocket。

我的浏览器是 Google Chrome。我也尝试了 Firefox 中的东西,仍然得到我得到的结果。

UPD:我将端口更改为443。出于某种原因,当我使用时

let socket = new WebSocket('wss://127.0.0.1:443');

我在浏览器控制台中收到以下错误:

WebSocket connection to 'wss://127.0.0.1/' failed

就像它不再看到端口号一样,因为我不确定它是否应该看到。

这里可以看到带有websocket的文件和主页面在同一个目录下,即/var/www/html/websocket/

javascript php ssl websocket apache2
1个回答
0
投票

好吧,问题确实出在端口号上,我不明白我应该使用哪个端口号,而那个不应该被使用的端口号,例如 3000。

另外,如果你想使用 ssl,Workerman 希望你配置与套接字的连接方式,所以我需要将其添加到我的 server.php 文件中:

$context = array(
'ssl' => array(
    'local_cert'  => './cert/myCA.pem',
    'local_pk'    => './cert/myCA.key',
    'verify_peer' => false,
)
);
 $worker = new Worker('websocket://127.0.0.1:3000', $context);
 $worker->transport = 'ssl';
© www.soinside.com 2019 - 2024. All rights reserved.