Devo eseguire alcuni complicati calcoli tra l'invio di messaggi, ma il primo messaggio viene inviato con il secondo dopo il completamento. Come posso inviarlo immediatamente?Ratchet WebSocket - invia un messaggio immediatamente
<?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;
}
}
server di partenza:
$server = IoServer::factory(
new HttpServer(
new WsServer(
$ws_manager
)
), $port
);
Si potrebbe usare un EventLoop che viene eseguito ogni millisecondo, e la vostra coda di messaggi da inviare. – MarshallOfSound
È una buona idea, ma penso che non sia la soluzione ottimale (molte iterazioni, che non fanno nulla). Purtroppo non conosco un modo migliore. – Redkrytos
Sì, era una specie di suggerimento di ultima istanza. A parte l'esagerazione di alcune delle parti principali di Ratchet. Suppongo che potresti usare symphony per avviare un nuovo processo per fare le cose del computer? – MarshallOfSound