作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力研究如何使用 zmq 来实现我需要的架构。我有一个经典的发布/订阅情况,除了一旦客户端 x 订阅了一个主题,我需要将主题数据发送给它以便在客户端死机并在重新连接时重新发送时进行缓存。数据顺序很重要,如果客户端暂时离线,我不能错过消息。
PUB/SUB 模式似乎不了解单个客户端,如果它死了,将停止向客户端 x 发送数据。另外,我无法发现这已经发生并缓存消息,也无法知道它何时重新连接。
为了尝试解决这个问题,我使用了 REQ/REP 模式,以便客户端可以宣布自己并有一些持久性,但这并不理想,原因如下:
1) 客户必须不断地询问“我有数据吗?”这冒犯了我的感情
2) 如果没有数据发送给客户端 x 但有数据发送给客户端 y,会发生什么情况?如果没有 zmq,我会为每个客户端分配一个线程,并简单地阻塞没有数据的线程,但我无法在不阻塞客户端 y 的情况下在单个线程中阻塞客户端 x。
我是不是想把一个圆钉子塞进一个方孔里,在这里?有什么方法可以让我从 PUB 那里得到反馈,说“无法发送给客户端 x”?所以我可以缓存消息吗?或者我应该使用其他模式吗?
否则对我来说它又回到了低级别的 tcp...
非常感谢;
杰里米
最佳答案
这是一个活跃的研究领域。
我目前正在做类似的事情。我们的解决方案是建立一个 TCP“反向 channel ”,在该 channel 上接收丢失的数据,并让订阅者知道上次成功接收到的发布是什么,这样当他们重新连接时,他们就可以请求自该发布以来的发布。
关于c - 用于可靠多播的 zmq 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939160/
我是一名优秀的程序员,十分优秀!