使用c#和python的NetMQ扩展请求-应答

本文关键字:扩展 请求 应答 NetMQ python 使用 | 更新日期: 2023-09-27 18:02:51

我能够有c#(客户端)和python(服务器)通过使用一个简单的请求-应答相互交谈。然而,我希望我的web应用程序建立在c# asp.net上是稳定的,需要更多的客户端和服务器,所以我尝试使用扩展的REQ-REP连接连接c#和python。

但是当我运行下面的代码时,它没有做代理的工作,也没有输出任何东西。我哪里做错了?

5600 = c# client

5601 = python server

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();
                            }
                        }

使用c#和python的NetMQ扩展请求-应答

您没有发送带有正确标志的所有消息帧。

您可以尝试使用netmq的代理来完成该操作。如果你仍然想手工编写它,看看代理如何使用正确的帧标志:

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();        
}