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

标签 c# asp.net zeromq

我刚刚开始学习 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/

相关文章:

c# - 按多列分组 - LINQ

c# - 如何使用SharpPcap抓取HTTP数据包

c# - Mac OS X Mono ASP.NET和C#编译过程

c# - 使用 Observable.FromEventPattern 在不活动或计数后执行操作

c# - 如何在 LongListSelector 中对日语和其他非拉丁语名称进行分组?

c# - 如何知道哪些程序集依赖于 system.web.mvc?

c# - 有没有办法获得来自 XSLT 转换 'on the fly' 的 asp.net 页面?

python - 使用 ZeroMQ/NFS 分发实时市场数据?

zeromq - 在 gevent 的 fd 上监听 POLLIN

java - 纯 Java ZeroMQ 客户端?