0

簡単な要求と応答を使用して、c# (クライアント) と python (サーバー) を相互に通信させることができます。ただし、c# asp.net で構築した Web アプリケーションを安定させ、より多くのクライアントとサーバーを必要とするため、Extended REQ-REP 接続を使用して c# と python を接続してみました。

しかし、以下のコードを実行すると、ブローカーとしての役割を果たさず、何も出力しません。ここで何が間違っていますか?

5600 = C# クライアント

5601 = Python サーバー

using (var frontend = new RouterSocket("@tcp://127.0.0.1:5600"))
                        using (var backend = new DealerSocket("@tcp://127.0.0.1:5601"))
                        {
                            // Handler for messages coming in to the frontend
                            frontend.ReceiveReady += (s, p) =>
                            {
                                var msg = p.Socket.ReceiveFrameString();
                                backend.SendFrame(msg); // Relay this message to the backend
                            };

                            // Handler for messages coming in to the backend
                            backend.ReceiveReady += (s, p) =>
                            {
                                var msg = p.Socket.ReceiveFrameString();
                                frontend.SendFrame(msg); // Relay this message to the frontend
                            };

                            using (var poller = new NetMQPoller { backend, frontend })
                            {
                                // Listen out for events on both sockets and raise events when messages come in
                                poller.Run();
                            }
                        }
4

1 に答える 1

0

すべてのメッセージ フレームを正しいフラグで送信していません。

まさにそれを行う netmq の Proxy を試すことができます。それでも手動で書きたい場合は、ここで正しいフレームフラグを使用してプロキシがどのようにそれを行うかを見てください。

https://github.com/zeromq/netmq/blob/master/src/NetMQ/Proxy.cs

アップデート:

以下は、あなたの場合にプロキシを使用する方法の例です。

using (var frontend = new RouterSocket("@tcp://127.0.0.1:5600"))
using (var backend = new DealerSocket("@tcp://127.0.0.1:5601"))
{
    using (var poller = new NetMQPoller { backend, frontend })
    {
        var proxy = new Proxy(frontend, backend, null, poller);
        proxy.Start();
        proxy.Run();
    }
}

ポーラーなしでも使用できます。

using (var frontend = new RouterSocket("@tcp://127.0.0.1:5600"))
using (var backend = new DealerSocket("@tcp://127.0.0.1:5601"))
{       
    var proxy = new Proxy(frontend, backend);
    proxy.Start();        
}
于 2016-08-17T09:46:28.453 に答える