go - ZeroMQ 知道请求来自哪个 go routine

标签 go zeromq

我想弄清楚我是否有两个例程调用同一个 zeromq 套接字,如果当从 routine1 上的 socket.recv() 返回时.. 套接字将知道返回到 routine1(同上例程 2,...例行公事)。

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

如果有帮助.. 考虑简单的盗版模式并使用 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()

所以在这种情况下,我不知道 routine1 或 routine2 的响应是否会先返回。我如何确保当我收到对套接字的响应时...我可以通知正确的例程的 recv() 函数。

谢谢!

最佳答案

我不相信可以使用 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() 
    }
}

关于go - ZeroMQ 知道请求来自哪个 go routine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30493492/

相关文章:

zeromq - 如果客户端断开连接,使用 ZeroMQ 向特定客户端和队列发送回复

php - zeromq - 总是丢失第一条消息

c++ - 在 C++ 中解析时带有 protobuf 段错误的 zeromq

concurrency - 并发http请求没有响应

Go: go run file.go 是如何工作的

c - Go 中的动态 FFI

c++ - ZeroMQ PGM Multicast 不支持来自应用层的回复处理?

go - Golang 中的错误——评估错误

go - 如何构造SELECT * FROM (<subquery>) ORDER BY column;形式的子查询?

c++ - 将 zmq::proxy 与 REQ/REP 模式结合使用