Как по вебсокету передавать сообщения на клиент?
Приложение на Symfony.
Мне необходимо на клиент передавать информацию о процессах происходящих на сервере.
Для этого я открыл websocket помощью библиотеки ratchet.
В MessageHandler есть такой метод, метод который принимает сообщения клиента и отдает ему данные:
public function onMessage(ConnectionInterface $from, $msg) { foreach($this->connections as $connection) { if ($connection === $from) { continue; } $connection->send($msg); } } |
public function onMessage(ConnectionInterface $from, $msg) { foreach($this->connections as $connection) { if ($connection === $from) { continue; } $connection->send($msg); } }
Все отрабатывает корректно, но этот метод срабатывает только когда приходит сообщение от клиента. Мне нужно отправлять сообщения с сервера по открытому вебсокету с определенной периодичностью, например:
for ($i = 0; $i < 10; $i++) { sleep(1); $connection->send('Hello'); } |
for ($i = 0; $i < 10; $i++) { sleep(1); $connection->send('Hello'); }
Но этот код ждет 10 секунд а потом отправляет сразу 10 сообщений. Как мне после запроса клиента отравлять сообщение каждую секунду? Как мне переписать код?
Дополнительно:
Нужен timer
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для передачи сообщений по вебсокету на клиент необходимо использовать специальный протокол WebSocket, который позволяет устанавливать двустороннее соединение между клиентом и сервером.
На стороне сервера, чтобы отправить сообщение клиенту, необходимо установить соединение с помощью WebSocket сервера. Вот пример кода на PHP, который демонстрирует, как отправить сообщение клиенту:
$server = new \Ratchet\WebSocket\WsServer($yourWebSocketHandler); $loop = \React\EventLoop\Factory::create(); $webSock = new \React\Socket\Server($loop); $webSock->listen(8080, '0.0.0.0'); $server = new \Ratchet\Server\IoServer($server, $webSock, $loop); $loop->run();
На стороне клиента, необходимо установить соединение с помощью JavaScript WebSocket API. Вот пример кода на JavaScript, который демонстрирует, как принять сообщение от сервера:
var socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('WebSocket connection opened'); }; socket.onmessage = function(event) { console.log('Message received from server: ' + event.data); };
Таким образом, вы можете использовать WebSocket для передачи сообщений между сервером и клиентом в реальном времени. Не забудьте обработать ошибки и закрыть соединение при необходимости.