3

WebSocket を使用して、symfony プロジェクトで簡単なチャット ページを作成しようとしています。最初にReact-phpライブラリを使用しました。ターミナルでは完全に動作しますが、ブラウザに接続しようとすると、クロムで次のエラーが発生しました。

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

ラチェットのサーバーコード

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

もう1つのことは、クライアントページのURLがlocalhost/X/chatサーバーでありlocalhost/X/server、試してみws://localhost:8000/X/serverましたが、まだ機能しません

4

3 に答える 3

1

問題はcURLextにありました。解決しました。

于 2012-11-05T16:19:37.720 に答える
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!');
};

これで問題が解決するはずです。

于 2012-10-28T14:28:45.427 に答える