Как по вебсокету передавать сообщения на клиент?

Ссылка скопирована
1 ответ

Приложение на 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

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

Для передачи сообщений по вебсокету на клиент необходимо использовать специальный протокол 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();

$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);
};

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 для передачи сообщений между сервером и клиентом в реальном времени. Не забудьте обработать ошибки и закрыть соединение при необходимости.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно