【问题标题】:WebSocket can't establish a connection to the serverWebSocket 无法与服务器建立连接
【发布时间】:2012-10-17 13:14:51
【问题描述】:

我尝试通过 WebSocket 在我的 symfony 项目上创建一个简单的聊天页面。 首先我使用 React-php 库,它在终端上完美运行,但是当我尝试将它连接到浏览器时,我在 chrome 上遇到了这个错误:

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

在火狐上

Firefox can't establish a connection to the server at ws://localhost:8000/.

接下来我使用Ratchet 库并按照教程进行操作,但仍然存在同样的问题,在终端上工作,在浏览器上出错。 我在终端上使用telnet localhost 8000,浏览器上的javascript是

var conn = new WebSocket('ws://localhost:8000');
conn.onmessage = function(e) {
    console.log(e.data);
};
conn.send('Hello World!');

React 的服务器代码

require __DIR__.'/../vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$conns = new \SplObjectStorage();
$socket->on('connection', function ($conn) use ($conns) {
    $conns->attach($conn);
    $conn->on('data', function ($data) use ($conns, $conn) {
        foreach ($conns as $current) {
            if ($conn === $current) {
                continue;
            }
            $current->write($data);
        }
    });
    $conn->on('end', function () use ($conns, $conn) {
        $conns->detach($conn);
    });
});
$socket->listen(8000);
$loop->run();

Ratchet 的服务器代码

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/chat.php';
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
$server = IoServer::factory( new WsServer( new Chat() ), 8000);
$server->run();

另一件事是客户端页面 url 是 localhost/X/chat 和服务器 localhost/X/server,我尝试了 ws://localhost:8000/X/server 但仍然不起作用

【问题讨论】:

    标签: symfony websocket phpwebsocket ratchet


    【解决方案1】:

    在建立连接之前你不能调用send。你需要绑定onopen事件:

    var conn = new WebSocket('ws://localhost:8000');
    conn.onmessage = function(e) {
        console.log(e.data);
    };
    conn.onopen = function () {
        conn.send('Hello World!');
    };
    

    这应该可以解决您的问题。

    【讨论】:

    • 如果连接正确,conn.send() 可以使用。但是我尝试了您的代码,但仍然无法正常工作。
    • “不起作用”是什么意思?你得到一个新的错误吗?如果是这样,我回答了你的问题。
    【解决方案2】:

    问题出在 cURL 分机中。解决了。​​

    【讨论】:

    • 你是怎么解决的?你到底是怎么让它起作用的?
    • 7 年后我不知道我做了什么 :) 根据评论,也许我已经为 php 安装了 curl 扩展
    • 我以为你不记得了,但我说无论如何都要尝试..我很绝望我的 websocket 没有连接,而且从我注意到的 cURL 中这不是问题..
    【解决方案3】:

    据我了解,React\Socket 打开一个明文 TCP/IP 连接。

    您可以使用任何纯文本 TCP/IP 客户端连接到您的服务器,例如 telnet 或任何其他 TCP/IP 库。

    如果您想使用 WebSocket 客户端,例如您的浏览器提供的客户端,则必须使用 WebSocket 服务器。 Ratchet 是一个建立在这个项目之上的 WebSocket 服务器。

    看这个 https://github.com/reactphp/socket/issues/142

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-06
      • 2021-01-02
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2021-07-18
      • 2018-08-09
      相关资源
      最近更新 更多