0

我可以通过使用简单的请求-回复让 c#(客户端)和 python(服务器)相互交谈。但是,我希望基于 c# asp.net 构建的 Web 应用程序稳定并且需要更多的客户端和服务器,因此我尝试使用扩展 REQ-REP 连接来连接 c# 和 python。

但是当我运行下面的代码时,它并没有作为代理完成它的工作并且什么也不输出。我在这里做错了什么?

5600 = c#客户端

5601 = 蟒蛇服务器

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 的用户代理来做到这一点。如果您仍想手动编写,请在此处查看代理如何使用正确的帧标志进行操作:

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 回答