6

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

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

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

我还查看了提供的示例:代码示例

这是套接字描述:ZMQ-Socket

4

3 回答 3

3

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

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

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

于 2012-07-02T02:19:57.030 回答
3

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

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

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

于 2012-07-03T05:54:44.303 回答
1

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

于 2012-06-28T13:30:03.647 回答