我使用Pyzmq在Python中使用ZMQ已有一段时间了,我必须使用CLRZMQ绑定将一些代码移植到C#上。我一直在遍历Google,试图找到某种文档,但是除了几个过时的代码示例甚至无法正常工作而且非常令人沮丧之外,我几乎什么也没发现。

我现在想要实现的目标非常简单。我们有一个简单的函数,该函数轮询超时的套接字,并且当超时时间过去后,它会引发一个自定义异常。这是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/

10-12 22:04