2017-07-27 59 views
2

我想開發一個使用Websockets(棘輪)的聊天系統。到現在爲止,我已經制作了一個功能強大的基於PHP的Websocket服務器,它能夠使用以下方法回覆預定義的JSON編碼消息。棘輪Websocket推集成

function onMessage(ConnectionInterface $from, $msg){ ... } 

的問題是,我想通過後臺工作/線程從後端數據庫郵件推送到正確的客戶端,如果東西在我的表改變。這可能使用PHP?

我不希望客戶端每隔5分鐘要求websocket服務器刷新其狀態,如下所示。

{"action":"giveMeUpdates"} 

但web服務器應該能夠做這樣的事情:

{"status":"newMessages", "messagelist":[...]} 

另外:

class Chat extends ChatActionHandler implements MessageComponentInterface { ... } 

這是我的課,其中ChatActionHandler擁有的功能與客戶端請求交互。使用MessageComponentInterface,我只能回覆Socket事件,如function onOpen(ConnectionInterface $conn)。它是由RatchetIO服務器拼命地跑:

$server = IoServer::factory(
    new Chat(), 
    8080); 
$server->run(); 

回答

0

您可以將定時器,比如cron與

$this->loop->addPeriodicTimer($timeout, function($timer) {}); 
+0

的MessageComponentInterface不持有這樣的功能。你的意思是\ React \ EventLoop \ LoopInterface?我想我可能需要在Chat類的構造函數中的某處首先實例化它? – Piter1700

+0

@ Piter1700看到這個。 https://github.com/ratchetphp/Ratchet/issues/171 – Grey