WebSocket无法与服务器建立连接

时间:2012-10-27 14:27:00

标签: symfony websocket phpwebsocket ratchet

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

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

并在firefox上

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();

另一件事是客户页面网址是localhost/X/chat和服务器localhost/X/server,我尝试ws://localhost:8000/X/server但仍然无法正常工作

3 个答案:

答案 0 :(得分: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 :(得分:1)

问题出在cURL分机上。解决。

答案 2 :(得分:0)

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

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

如果要使用WebSocket客户端(例如浏览器提供的客户端),则必须使用WebSocket服务器。 Ratchet是一个基于此项目的WebSocket服务器。

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