我正在使用ZeroMQ的C#包装器,但这似乎更像是ZeroMQ的潜在问题.
有没有办法在没有阻塞和没有排队的情况下推送消息?如果服务器没有启动,我希望永久处理这些消息而不会阻塞.
以下是我到目前为止尝试过的设置:
1)
发送(阻止发送)
高水位线= 0
这(stragely)不会阻塞,但它似乎在内存中排队,直到套接字连接(内存不断上升为进程).
2)
发送(非阻止发送)
高水位= 1
这是竞争条件.如果我快速连续发送两条消息,有时会抛出一条消息,因为超过了高水位线.
3)
轮询套接字以确定它是否会阻塞.这并没有真正帮助,因为我仍然必须在开始阻塞之前将一条(旧)消息放入队列中(如果我设置HWM = 1).
具有任何高水位标记的非阻塞发送是不合需要的,因为一旦服务器重新联机,它就会从客户端获得一堆旧消息.
阻止发送不起作用,因为我不想阻止.
你似乎在寻找的只是一个PUB插座.此套接字类型永远不会阻止发送,并丢弃它无法发送给订阅者的任何消息.请参阅此页:http://api.zeromq.org/3-2:zmq-socket.
另外,您不需要将此套接字用于"真正的"pub/sub,您可以通过端点只有一个PUB和一个SUB套接字来将它用于两个节点之间的非阻塞通信. 重新连接后,您的服务器将不会收到"旧"消息,因为PUB套接字将丢弃在服务器断开连接时无法发送的消息.不过我相信虽然你无法避免一些内部的ZMQ"排队",但它应该对你的用例没什么影响.| 归档时间: |
|
| 查看次数: |
2297 次 |
| 最近记录: |