2012-06-26 21 views
6

在C中我们有套接字和描述符,可以将其中的一个移交给一个线程,这使得您可以接受传入的连接并给出工作到你喜欢的线程,线程可以自己发送回应。ZeroMQ:如何实现类似C的多线程

我的问题是,我怎样才能实现这与ZeroMQ?对于Request-Reply模式,似乎我不能异步发送和接收,响应必须按顺序进行,我的目标是将多个客户端连接到单个服务器,而不是按顺序发送响应。

我查看了请求响应模式,但API明确指出,使用该多线程的Socket是一个坏主意。也许我错过了一些东西,或者ZeroMQ比我知道的更聪明。如果您需要更多信息,请发表评论,我会尽我所能提供信息。

我也有一个看看提供的例子:Code Examples

这里是插座描述:ZMQ-Socket

回答

3

经过几天的搜索,一个友好的人在IRC的zeromq频道为我提供了帮助。

更新的链接,以防有人仍在寻找。应该持久! http://zguide.zeromq.org/

这个例子确实很好,它很容易适应,我用线程池提升线程。

+0

不幸的是,该页面不存在。谨慎张贴在这里,所以这是一个答案? –

+0

嗨d -_- b这里是另一个选择它waybackmachine http://web.archive.org/web/20120704201150/http://www.zeromq.org/blog:multithreaded-server –

+0

很好的阅读。谢谢奥利弗。 –

2

据我了解你需要的要进行新的线程为每个传入连接,每个线程服务器正确答复一个连接,如果是这样,这是示例代码正是这样做: http://www.kieser.net/linux/java_server.html

+0

感谢Shahryar你的努力,在这里我的要求真的与“zeroMq”的原因是可扩展性,我希望能够稍后扩展应用程序让不同机器上的工作人员来完成这些任务,我可以“根据模型”扩展我的模型与库到有不同的模式,因此具有更高的可扩展性。 –

2

通常,当您尝试将现有设计调整为0MQ时,您会遇到麻烦。这里现有的设计将套接字(通常是HTTP)传递给子进程或线程,然后允许它们作出响应。这不是一个非常优雅的设计。它的工作原理是因为每个新连接都以套接字的形式存在,并且因为发送回复时套接字被销毁。这些都不适用于0MQ应用程序。

0MQ设计使用前端ROUTER套接字,该套接字引入来自客户端的请求。然后它通过inproc://套接字将这些请求传递给工作线程,使用后端DEALER处理请求。工作线程使用REP套接字来接收请求,并重新发送它们的回复。主线程然后轮询前端和后端套接字,只需在两者之间路由消息。

这是什么,老博客文章解释(使用传统的XREP/XREQ名称),并且它在更详细的解释,在许多语言在这里的例子:http://zguide.zeromq.org/page:all#Multithreading-with-MQ