【发布时间】:2020-03-10 15:19:31
【问题描述】:
经典的 ZeroMQ PUB 模式,类似于:
- 格式化您的完整消息
- 发送您的信息
- (由ZMQ管理)如果主题有订阅者,则发送,否则丢弃?
我在我的一个应用程序中注意到,一些消息的格式非常繁重并且需要很多时间。当我没有该主题的订阅者时,我做所有这些工作都是徒劳的。
我想知道是否有办法在格式化消息的其余部分之前检查主题是否已订阅。
我知道会有 TOCTOU 问题:
1. 检查主题是否已订阅(不是)
2.(ZMQ收到主题订阅)
3.数据未发送...
或
1.检查主题是否被订阅(它是)
2. 开始格式化消息
3.(ZMQ收到主题退订)
4.发送到socket,数据不发送(浪费时间)
...我都可以。
我尝试过使用多部分消息(首先发送“标题/主题”而不格式化消息的其余部分)但是:
- 它似乎没有做我在这里的意思
- 我的订阅者还必须处理多部分消息(可以做一个简单的zmq_recv()),这有点烦人
有什么想法吗?我想我知道在哪里修补 xpub.cpp ,添加一个复制/粘贴部分 xpub::xsend() ( https://github.com/zeromq/libzmq/blob/656205b5f9159677d325cff5e6e26c97f95d8cd7/src/xpub.cpp#L289 ) 的方法,但我什至不确定 ZMQ 社区会对此感兴趣。
【问题讨论】:
标签: zeromq