ZeroMQ知道请求来自哪个例行程序

时间:2015-05-27 21:30:13

标签: go zeromq

我试图弄清楚我是否有两个例程调用相同的zeromq套接字,如果从例程1上的socket.recv()返回时返回..套接字将知道返回例程1(同样用于例程2,... routinen)。

因此......使用具有请求/响应语义的消息传递总线,在此过程中处理此问题的最佳模式是什么?

如果有帮助..考虑简单的盗版模式,并使用zeromq在该模式中实现RPC样式调用集。

Socket; //zeromq socket
//routine 1
socket.send(data) // do i need some identifier here for this routine?
socket.recv() // wait until i get a response from that send
//routine 2 
socket.send(data)
socket.recv()

所以在这种情况下,我不知道例程1或例程2的响应是否会先回来。我怎样才能确保当我得到套接字的响应时......我可以通知正确的例程'recv()函数。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不相信使用zeromq在线程之间可以同时共享套接字

可能你需要做某种侦听请求的goroutine,发送/接收zmq,然后回复。

例如:(未经测试的代码)

type Req struct {
   Data []byte 
   Reply chan []byte
}

go func() { // probably not the zmq api, but you should get the idea here
    for req := <- requests {
         socket.send(req.Data)
         req.Reply <- socket.recv() 
    }
}