pyzmq:ROUTER 套接字是否有类似于 "sendto" 的函数的快捷方式?

pyzmq: Is there a shortcut for a "sendto"-like function for a ROUTER socket?

我有一个 ROUTER 套接字,它接受请求,做一些工作并发回响应:

import zmq

context = zmq.Context()
socket = context.socket(zmq.ROUTER)
socket.bind("tcp://*:1234")
sender, _, content = socket.recv_multipart()
reply = do_some_work(content)                    # Do something with the message
socket.send_multipart((sender, "", reply))

发送响应时,中间的空字符串感觉很愚蠢,虽然我知道 ZeroMQ 需要它来将身份与内容分开。

我希望高级语言绑定(例如 pyzmq)具有包装它的函数并提供更清晰、不易出错的函数 API。

我可以想象这样的事情:

socket.sendto(identity, content)

它会为我添加空框。

所以 - 有类似的东西吗?

嗯,据我所知,不,没有。


原因1)
恕我直言,身份 / 安全 / ... 概念在我看来是一种前 post 附加组件,很容易将这些附加组件的多帧组合概念重新使用到已经存在的成熟的 API + 无数这样的 API 语言绑定,其中一些可能,其中一些可能没有任何类似的语法自由度,例如类似地美化调用原始 ZeroMQ 的方式核心公开 API 服务。人们应该以某种方式尊重 ZeroMQ 长期成功的 运行 演变,他们灌输的组织方面产生共识并在实施中遵守 RFC 规范并管理端到端的开发过程,但它跨越 API v 2.1 多年来一直存在,并且在最近几天经历了许多设计和技术转变,最近核心 API v 4.2.2 在生产中稳定。

原因2)
OOD/OOP 布道者会让你很快修改你的观点,期望别人为你做这件事,一旦你想象中的高层次观点要求有一个
socket.sendto( identity, content ) 特定于自定义的方法论证基于您自己的舒适度(参考上文)——因为这是使用适当工具的非常明显的情况——子类化 -- 然后添加您自己的专用方法,扩展通用超类行为并添加您希望的舒适度,所有这些都在您的控制之下。


无论如何,享受 ZeroMQ 的强大功能,因为它可以在设计高级可扩展分布式异构非阻塞信令/消息系统的许多方面帮助您。 G/L 踏上狂野而创新的旅程!