我刚刚开始学习 NetMQ,它源自 zeroMQ。我不太了解 C 或 C++,所以我发现 zeroMQ 教程是一个挑战,而 NetMQ 教程似乎略读了很多内容。我想要的只是进程之间的双向绑定(bind)。
app1 ----- 请求数据----> app2 app1 <---- 接收数据 --- app2
提供的基本示例是
using (var context = NetMQContext.Create())
using (var server = context.CreateResponseSocket())
using (var client = context.CreateRequestSocket())
{
server.Bind("tcp://127.0.0.1:5556");
client.Connect("tcp://127.0.0.1:5556");
client.Send("Hello");
string fromClientMessage = server.ReceiveString();
Console.WriteLine("From Client: {0}", fromClientMessage);
server.Send("Hi Back");
string fromServerMessage = client.ReceiveString();
Console.WriteLine("From Server: {0}", fromServerMessage);
Console.ReadLine();
}
然后只需更改 IP。没问题。但据我了解,这会阻塞一个线程吗?我想要的是让客户发送请求,然后做其他事情。同时服务端收到消息,开始获取数据或做其他处理,完成后返回结果。但是,如果我在其中插入一个大的 switch 语句,进行相关处理并最终返回结果,它会阻塞 zeroMQ 上下文/线程吗?这引出了我的下一个问题:zeroMQ 上下文是多线程的吗?
我需要的是尽可能异步工作的系统,如果我在这里完全走错了方向,我会很感激正确的观点! 非常感谢
最佳答案
首先,NetMQContext 是线程安全的。 NetMQSocket 不是。
您需要有一个专用于 NetMQSocket 的线程,一个线程也可以使用 Poller 处理多个套接字和计时器。您也可以使用 NetMQScheduler 在线程上运行任务。请阅读以下内容:
http://netmq.readthedocs.org/en/latest/poller/ http://somdoron.com/2013/06/netmq-scheduler/
关于c# - 需要在netMQ中使用inproc保持一个线程接收消息还是有更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267240/