gpt4 book ai didi

c# - ZeroMQ 非阻塞非队列推送

转载 作者:行者123 更新时间:2023-12-03 19:33:38 27 4
gpt4 key购买 nike

我正在为 ZeroMQ 使用 C# 包装器,但这似乎更像是 ZeroMQ 的潜在问题。

有没有办法不阻塞不排队推送消息?如果服务器未启动,我希望消息能够在不阻塞的情况下永久处理。

以下是我到目前为止尝试过的设置:

1)

发送(阻塞发送)

高水位线 = 0

这(不幸的是)并没有阻塞,但它似乎在内存中排队,直到连接套接字(进程的内存不断上升)。

2)

发送(非阻塞发送)

高水位线 = 1

这是一个竞争条件。如果我快速连续发送两条消息,一条消息有时会因为超过高水位线而被抛出。

3)

轮询套接字以确定它是否会阻塞。这并没有真正帮助,因为我仍然必须在它开始阻塞之前将一条(旧)消息放入队列中(如果我设置 HWM = 1)。

带有任何高水位标记的非阻塞发送是不可取的,因为一旦服务器恢复在线,它就会从客户端收到一堆旧消息。

阻止发送不起作用,因为我不想阻止。

最佳答案

您似乎正在寻找的只是一个 PUB 套接字。这种套接字类型从不阻塞发送,并丢弃它无法发送给订阅者的任何消息。查看此页面:http://api.zeromq.org/3-2:zmq-socket .

附带说明一下,您不需要将此套接字用于“真正的”发布/订阅,您可以将它用于两个节点之间的非阻塞通信,方法是端点只有一个 PUB 套接字和一个 SUB 套接字。

重新连接后,您的服务器将不会收到“旧”消息,因为 PUB 套接字将丢弃在服务器断开连接时无法发送的消息。尽管如此,我相信虽然您无法避免某些内部 ZMQ“排队”,但它对您的用例应该没有什么影响。

关于c# - ZeroMQ 非阻塞非队列推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com