1

Websocket を介してサーバーへのリクエストを取得し、サーバーから応答を返そうとしています。これは「一種の」動作ですが、これを実行できるのは一度だけです。余分なリクエストはどこかにハングアップします。

サーバーバインド:

$pull = $context->getSocket(ZMQ::SOCKET_REP);
$pull->bind('tcp://127.0.0.1:5552');
$pull->on('message', array($pusher, 'onPull'));
$pull->recv();
$pull->send('back');

サーバーに静的な PHP ファイルがあり、実行時にサーバーからの応答を返す必要があります。

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

$socket->send('sending');

$message = $socket->recv();

echo "$message";

サーバーを起動してphpファイルを実行すると、「戻る」応答が返されます。ただし、もう一度実行しようとすると、ハングします。リクエストは毎回受けているのですか?

また、誰か$pull->onが私にビットを説明できますか?それが何をするのかどこにも見つかりません。


完全なサーバー コード:

<?php
    require './vendor/autoload.php';

    $loop   = React\EventLoop\Factory::create();
    $pusher = new MyApp\Pusher;

    $context = new React\ZMQ\Context($loop);

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

    $pull = $context->getSocket(ZMQ::SOCKET_REP);
    $pull->bind('tcp://127.0.0.1:5552');
    $pull->on('message', array($pusher, 'onPull'));
    $pull->recv();
    $pull->send('back');

    $webSock = new React\Socket\Server($loop);
    $webSock->listen(8080, '0.0.0.0');
    $webServer = new Ratchet\Server\IoServer(
        new Ratchet\Http\HttpServer(
            new Ratchet\WebSocket\WsServer(
                $pusher
            )
        ),
        $webSock
    );

    $loop->run();
4

1 に答える 1

2

私はこのようなものが仕事をするべきだと思います:

$pull->on(
    'message',
    function ($message) use ($pull) {
        $pull->send('response');
    }
);

いずれにせよ、上記のような無名関数を使用する場合でも、オブジェクトとメソッドのペアを使用する場合でも、 にアクセスする必要があります$pull。これは、メッセージを送信できる通信チャネルであるためです。コードのベースと思われるhttp://socketo.me/docs/pushの例は、メッセージのみを受信するプル ソケットを使用するため、必要ありません。

于 2014-05-27T20:10:02.787 に答える