Я пытаюсь создать простую страницу чата в моем проекте Symfony с помощью WebSocket. Сначала я использовал библиотеку React-php, она отлично работает на терминале, но когда я пытаюсь подключить ее к браузеру, я столкнулся с этой ошибкой на хроме:
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
, но все равно не работает.