我可以使用简单的请求 - 回复让c#(客户端)和python(服务器)相互通信。但是,我希望我在c#asp.net上构建的web应用程序稳定并需要更多的客户端和服务器,所以我尝试使用扩展REQ-REP连接来连接c#和python。
但是,当我运行下面的代码时,它不会作为代理执行任务并且不输出任何内容。我在这里做错了什么?
5600 = c#client
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();
}
}
答案 0 :(得分: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();
}