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

时间:2015-03-25 21:51:38

标签: c# asp.net zeromq

我刚开始学习从zeroMQ派生的NetMQ。我不太了解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即可。没问题。但据我所知,这将阻止一个线程?我想要的是客户端发送请求,然后做其他事情。同时,服务器接收消息,关闭并获取数据或进行其他处理,并在完成后返回结果。但是如果我在那里推一个大的switch语句,做相关的过程并最终返回一个结果,它会阻塞zeroMQ上下文/线程吗?这引出了我的下一个问题:zeroMQ上下文多线程?

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

1 个答案:

答案 0 :(得分:3)

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

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

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