搜尋

首頁  >  問答  >  主體

c++ - zeromq中的router/dealer模式在多线程下的无法收到消息?

期待熟悉zeromq的前辈。

在zeromq的guide里,它用router/dealer模式做了一个broker

client对应ZMQ_REQ类型的zmq_socket
worker对应ZMQ_REP类型的zmq_socket
broker创建一个router和一个dealer,router接受client的消息并转发给worker,worker再把处理结果发送给dealer,dealer再转发给client.

然后我尝试把这个代码做一个变换,由多进程改为多线程,代码如下:
https://gist.github.com/ichenq/61fc280e153313e2d828

可是broker收到client的消息后,却无法发送给worker,不知道是什么原因?
或者不知道我的代码里哪个API没有用对?

天蓬老师天蓬老师2767 天前687

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-04-17 11:32:36

    2小時後自問自答。

    的確是自己程式碼的問題, create_broker函式裡傳遞給zmq_msg_send的參數ZMQ_SNDMORE寫成了ZMQ_MORE。
    現在gist已經更新。

    用tcp可以做多進城,同樣的程式碼用inproc改就可以做多執行緒了。

    還有一個要說明的就是,zmq socket在bind的時候沒有網域解析,只能選定IP位址或*號(不能用localhost),但是在connet的時候卻是要做網域解析的,可以不用指定IP

    回覆
    0
  • 取消回覆