gpt4 book ai didi

c# - ZeroMQ CLRZMQ - 轮询套接字

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:55 24 4
gpt4 key购买 nike

我在 Python 中使用 ZMQ 和 Pyzmq 已经有一段时间了,我必须使用 CLRZMQ 绑定(bind)将我们的一些代码移植到 C#。我一直在 Google 上四处寻找某种文档,但除了一些甚至不起作用的过时代码示异常(exception),我几乎一无所获,这非常令人沮丧。

我现在想要实现的是非常简单的事情。我们有一个简单的函数来轮询一个超时的套接字,当超时时间结束时,它会引发一个自定义异常。这是它在 Python 中的样子:

def raise_on_timeout(sock, timeout):
"""
sock is a ZMQ socket
timeout is a timedelta object from datetime.
"""
if timeout is not None:
timeout = int(timeout.total_seconds() * 1000)
if not sock.poll(timeout):
raise TimeoutException("Communication timed out")

看起来很简单,对吧?此函数在 send_multipart 和 recv_multipart 之间调用,因此如果我们在监听数据时超时,我们可以对其进行管理。

如何使用 CLRZMQ 在 C# 中实现类似的功能?

此外,如果有任何类型的 CLRZMQ api 文档,请指出我在哪里可以找到它,我将不胜感激。

谢谢

最佳答案

好的,这是实际的最终答案。在这一个中,我什至不需要 Context 的实例。这样就好多了。

下面是在 C# 中创建类似 raise_on_timeout 方法的代码。

public static void RaiseOnTimeout(Socket sock, TimeSpan timeout)
{
List<PollItem> pollItemsList = new List<PollItem>();
PollItem pollItem = sock.CreatePollItem(IOMultiPlex.POLLIN);
pollItemsList.Add(pollItem);

int numReplies = Context.Poller(pollItemsList.ToArray(), timeout.Value.Ticks * 10);

if (numReplies == 0)
{
throw new TimeoutException();
}
}

关于c# - ZeroMQ CLRZMQ - 轮询套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417328/

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