首页 文章

ZMQ REP,知道谁发送请求

提问于
浏览
9

我目前正在使用zmq和python . 服务器正在使用REP套接字 .

在收到消息时,我有办法知道是谁发送的吗?如果收到2条消息,我只需要知道它们是否来自同一个用户,所以例如uid就足够了 .

2 回答

  • 14

    看起来您希望在服务器端实现异步请求处理:您让服务器接受请求,异步处理它们,并在响应数据可用于每个请求时将响应发送回客户端 . 现在当然:在您处理完请求后,您将如何知道将哪个客户端发送回去?

    使用简单的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的简短说明 .

  • 2

    阅读http://zguide.zeromq.org/page%3aall#Transient-vs-Durable-Sockets,您只能获得're working with... not the socket of any peers you'连接的套接字的标识 .

    这就是说,只需将发件人信息构建到消息中即可 . 这应该是微不足道的(使用UUID或每个客户端的特定名称) .

相关问题