【问题标题】:ZeroMQ: how to achieve C-like multithreadingZeroMQ:如何实现类 C 的多线程
【发布时间】:2012-06-27 11:23:39
【问题描述】:

在 C 中,我们有套接字和描述符,可以只取其中一个并将它们交给线程,这使得您可以接受传入的连接并将工作交给您喜欢的线程和线程可以自己发回响应。

我的问题是,如何使用 ZeroMQ 实现这一点?使用请求-回复模式,我似乎无法异步发送和接收,响应必须按顺序排列,我的目标是让多个客户端连接到单个服务器,而不是按顺序发送响应。

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

我还查看了提供的示例:Code Examples

这里是 Socket 描述:ZMQ-Socket

【问题讨论】:

    标签: java multithreading sockets zeromq


    【解决方案1】:

    经过几天的搜索,Zeromq 频道的 IRC 友好人士为我提供了帮助。

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

    这个例子真的很好用,很容易适应,我使用了带线程池的boost线程。

    【讨论】:

    【解决方案2】:

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

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

    那篇旧博客文章解释了什么(使用旧的 XREP/XREQ 名称),并在此处通过多种语言的示例进行了更详细的解释:http://zguide.zeromq.org/page:all#Multithreading-with-MQ

    【讨论】:

      【解决方案3】:

      据我了解,您需要一台服务器,该服务器希望为每个传入连接创建新线程,并且每个线程都只回复一个连接,如果是这样,这就是执行此操作的示例代码: http://www.kieser.net/linux/java_server.html

      【讨论】:

      • 感谢 Shahryar 的努力,我在这里的请求真的是“zeroMq”,原因是可扩展性,我希望以后能够扩展应用程序,让不同机器上的工作人员来做任务,使用 zeromq 我可以“根据模型”使用库扩展我的模型以具有不同的模式,因此具有更高的可扩展性..
      猜你喜欢
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多