0

現在、Ratchet PHP で動作する Web ソケット サーバーを使用しています。外部スクリプトがサーバーと通信する段階にはありません。ZMQ を使用してデータを正常にプッシュできます。

push.php

$json = ['name' => 'Joe Bloggs'];

$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'Push Notification');
$socket->connect("tcp://localhost:5555");

$socket->send(json_encode($json));

次に、Web サーバー スクリプトで、これをメソッド ( onNewPush) に送信して、push.php ファイルが実行された (実行された?) ときに何かを実行できます。

...
$push = $context->getSocket(ZMQ::SOCKET_PULL);
$push->bind('tcp://127.0.0.1:5555');
$push->on('Push Notification', array($pusher, 'onNewPush'));
...

これは問題なく機能しますが、応答を返そうとすると問題が発生します。私は次のようなことを試みています:

プル.php

$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_REQ, 'Pull Notification');
$socket->connect("tcp://localhost:5554");

$socket->send('data');

echo $socket->recv();

次に、サーバースクリプトで:

$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5554');
$pull->on('message', array($pusher, 'onPull'));

私の$pusher変数は、いくつかの Ratchet インターフェイスを実装するファイルをロードします。しかし、基本的には文字列を返すだけです:

public function onPull()
{
    return "some data";
}

実行pull.phpするとエラーが発生します:

Fatal error: Uncaught exception 'ZMQSocketException' with message 'Failed to receive message: Not supported' in websockets\pull.php:9 Stack trace: #0 websockets\pull.php(9): ZMQSocket->recv() #1 {main} thrown in websockets\pull.php on line 9

誰かが理由を知っていますか?

また、2 番目のパラメーターにはどのような重要性がありgetSocket()ますか? 二度と使われない紐のようです。

乾杯

更新しました

4

2 に答える 2

1

pull.php ファイルには、REQソケットに接続するPULLソケットがあります。 ドキュメントをチェックして、互換性のあるソケット ペアを確認してください。特に、REQ-REPクライアントがデータを要求し、サーバーが応答を返すことができるように、ペアが必要なようです。PUSH-PULLサーバーが次のクライアントの準備ができているデータをキューに入れ、クライアントが次のものをキューからプルする場合に使用します。

いずれの場合も、REQソケットをPULLソケットまたはソケットに接続することはできませんPUSH

リストされたコードまたは命名スキームからのユースケースまたは通信アーキテクチャを完全に理解していないため、それ以上にどれだけ詳細を提供できるかわかりません。何が起こっているのかを自由に明確にしてください。アドバイスできるかもしれませんより明確に、どのソケット戦略を使用する必要があります。

于 2014-05-27T19:20:19.507 に答える
0

pull.php に次の行があります。

echo $socket->recv();

プッシュ ソケットは、メッセージを受信するためではなく、送信するためのものです。それがおそらく例外の原因です。

また:on()プル ソケットのメソッドの最初のパラメーターは である必要があります'message'

$pull->on('message', array($pusher, 'onPull'));
于 2014-05-26T18:04:03.173 に答える