Muszę wykonać skomplikowane obliczenia między wysyłaniem wiadomości, ale pierwsza wiadomość jest wysyłana z sekundą po kompultowaniu. Jak mogę to natychmiast wysłać?Ratchet WebSocket - natychmiast wyślij wiadomość
<?php
namespace AppBundle\WSServer;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class CommandManager implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) {
//...
}
public function onClose(ConnectionInterface $connection) {
//...
}
public function onMessage(ConnectionInterface $connection, $msg) {
//...
$connection->send('{"command":"someString","data":"data"}');
//...complicated compulting
sleep(10);
//send result
$connection->send('{"command":"someString","data":"data"}');
return;
}
}
Uruchomienie serwera:
$server = IoServer::factory(
new HttpServer(
new WsServer(
$ws_manager
)
), $port
);
Można użyć EventLoop który uruchamia każdą milisekundę, a swoją kolejkę komunikatów do wysłania. – MarshallOfSound
To fajny pomysł, ale myślę, że nie jest to optymalne rozwiązanie (wiele iteracji, które nic nie robią). Niestety nie znam lepszego sposobu. – Redkrytos
Tak, to było coś w rodzaju ostatniej sugestii. Nie obejść niektórych głównych części Ratchet. Przypuszczam, że mógłbyś użyć symfonii, aby uruchomić nowy proces roboczy do komputerów? – MarshallOfSound