使用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();
}
}
您没有发送带有正确标志的所有消息帧。
您可以尝试使用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();
}