需要在netMQ中使用inproc保持一个线程接收消息还是有更好的方法?

Do you need to use inproc in netMQ to keep one thread for receiving messages or is there a better way?

我刚开始学习 NetMQ,它源自 zeroMQ。我不太了解 C 或 C++,所以我发现 zeroMQ 教程是一个挑战,而 NetMQ 教程似乎略读了很多内容。我想要的只是进程之间的双向绑定。

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。没问题。但据我了解,这会阻塞一个线程吗?我想要的是让客户发送请求,然后做其他事情。同时服务器收到消息,关闭并获取数据或进行其他处理,完成后 returns 结果。但是,如果我在其中塞入一个大的 switch 语句,执行相关过程并最终 return 结果,它会阻塞 zeroMQ context/thread 吗?这引出了我的下一个问题:zeroMQ 上下文是多线程的吗?

我需要的是系统尽可能异步工作,如果我在这里完全走错了方向,我会很感激正确的观点! 非常感谢

首先,NetMQContext 是线程安全的。 NetMQSocket 不是。

您需要有一个专用于 NetMQSocket 的线程,一个线程也可以使用 Poller 处理多个套接字和计时器。您也可以使用 NetMQScheduler 在线程上执行 运行 任务。请阅读以下内容:

http://netmq.readthedocs.org/en/latest/poller/ http://somdoron.com/2013/06/netmq-scheduler/