我目前正在使用zmq和python . 服务器正在使用REP套接字 .
在收到消息时,我有办法知道是谁发送的吗?如果收到2条消息,我只需要知道它们是否来自同一个用户,所以例如uid就足够了 .
看起来您希望在服务器端实现异步请求处理:您让服务器接受请求,异步处理它们,并在响应数据可用于每个请求时将响应发送回客户端 . 现在当然:在您处理完请求后,您将如何知道将哪个客户端发送回去?
使用简单的REP套接字,ØMQ确保您不会通过强制执行 recv() -> send(), recv() -> send() 顺序来遇到此类问题 . 换句话说,在REP套接字上执行 recv() 之后, must 再次 recv() 之前再执行 send() . 响应将被发送回您收到消息的客户端,并且有's no doubt about client'的地址,因为它一次只有一个客户端 .
recv() -> send(), recv() -> send()
recv()
send()
但这并不是Multipart消息和ROUTER(或XREP)套接字的用途 . XREP打破了REP的 recv() -> send() 锁步,但这导致了我们之前看到的问题 - 如果连接多个客户端,您如何知道将回复发送回哪个客户端?为了使这项工作,ZeroMQ中的XREP在消息的前面添加了一个消息部分,如信封,其中包含请求来自的连接的标识 .
recv() -> send()
关于advanced Request-Reply patterns的ZMQ指南中有一整章 . 您还可以找到处理异步请求的示例here以及ZeroMQ连接处理here的简短说明 .
阅读http://zguide.zeromq.org/page%3aall#Transient-vs-Durable-Sockets,您只能获得're working with... not the socket of any peers you'连接的套接字的标识 .
这就是说,只需将发件人信息构建到消息中即可 . 这应该是微不足道的(使用UUID或每个客户端的特定名称) .
2 回答
看起来您希望在服务器端实现异步请求处理:您让服务器接受请求,异步处理它们,并在响应数据可用于每个请求时将响应发送回客户端 . 现在当然:在您处理完请求后,您将如何知道将哪个客户端发送回去?
使用简单的REP套接字,ØMQ确保您不会通过强制执行
recv() -> send(), recv() -> send()
顺序来遇到此类问题 . 换句话说,在REP套接字上执行recv()
之后, must 再次recv()
之前再执行send()
. 响应将被发送回您收到消息的客户端,并且有's no doubt about client'的地址,因为它一次只有一个客户端 .但这并不是Multipart消息和ROUTER(或XREP)套接字的用途 . XREP打破了REP的
recv() -> send()
锁步,但这导致了我们之前看到的问题 - 如果连接多个客户端,您如何知道将回复发送回哪个客户端?为了使这项工作,ZeroMQ中的XREP在消息的前面添加了一个消息部分,如信封,其中包含请求来自的连接的标识 .关于advanced Request-Reply patterns的ZMQ指南中有一整章 . 您还可以找到处理异步请求的示例here以及ZeroMQ连接处理here的简短说明 .
阅读http://zguide.zeromq.org/page%3aall#Transient-vs-Durable-Sockets,您只能获得're working with... not the socket of any peers you'连接的套接字的标识 .
这就是说,只需将发件人信息构建到消息中即可 . 这应该是微不足道的(使用UUID或每个客户端的特定名称) .