WebSocket 无法建立与服务器的连接。

问题描述 投票:3回答:3

我试图在我的symfony项目上用WebSocket制作一个简单的聊天页面。React-php 库,它在终端上完美地工作,但当我试图将它连接到浏览器时,我在chrome上面临这个错误。

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

而在火狐浏览器上

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

接下来我用 棘轮 库,并按照教程操作,但还是同样的问题,在终端上工作,在浏览器上出错。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();

另外就是客户端页面的网址是 localhost/X/chat 和服务器 localhost/X/server我试过了 ws://localhost:8000/X/server 但还是不行

symfony websocket phpwebsocket ratchet
3个回答
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!');
};

这应该能解决你的问题


1
投票

问题是在cURL ext.解决了。


0
投票

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

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

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

看这个https:/github.comreactphpsocketissues142

© www.soinside.com 2019 - 2024. All rights reserved.