2017-07-27 8 views
2

私はWebsocket(Ratchet)を使ってチャットシステムを開発しようとしています。これまで、私はすでに以下のメソッドを使用して定義済みのJSONエンコードされたメッセージに答えることのできるPHPベースのWebsocketサーバーを作成しました。ラチェットWebsocket push integration

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

問題は何かが私のテーブルに変更された場合、私は、右のクライアントにバックグラウンドワーカー/スレッドを経由してバックエンドのデータベースからメッセージをプッシュしたいということです。これはPHPを使って可能ですか?

私はクライアントが以下のように状態を更新するために5分ごとにwebsocketサーバに尋ねることは望ましくありません。

{"action":"giveMeUpdates"} 

が、ウェブサーバは、このような何か行うことができる必要があります。また

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

class Chat extends ChatActionHandler implements MessageComponentInterface { ... } 

これは、クライアントの要求と対話するためのChatActionHandlerは、機能を保持している私のクラスです。 MessageComponentInterfaceでは、function onOpen(ConnectionInterface $conn)のようなSocketイベントでしか返信できません。これは、RatchetIO Serverによってrunnedさ:

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

答えて

0

あなたはMessageComponentInterfaceは、このような機能を保持していない

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

でcronのように、タイマーを添付することができます。 \ React \ EventLoop \ LoopInterfaceを意味しますか?私はチャットクラスのために私のコンストラクタのどこかでインスタンス化しなければならないかもしれないと思う? – Piter1700

+0

@ Piter1700これを参照してください。 https://github.com/ratchetphp/Ratchet/issues/171 – Grey

関連する問題