c# - ZeroMQ 套接字 Recv() 抛出 'Context was terminated' 异常 - 为什么以及如何恢复?

标签 c# zeromq

通过 ZeroMQ 使用 ZMQ.SocketType.REP(回复)消息套接字,我正在接收消息,然后发回“OK”消息。

目前,我正在本地尝试此操作(从在同一台机器上运行的同一 C# 控制台应用程序发送/接收消息)。

相当有规律地(在大约 1500 条消息之后),该行:

var receivedBytes = _recvSocket.Recv();

... 将抛出异常:Context was terminated

我的问题是,为什么会发生这种情况,您如何从中恢复

我有一个 System.Threading.Thread 专用于运行我的“服务器端”ZeroMQ 回复套接字,这是它运行的循环:

    private static void MessagingLoopReceive(object state)
    {
        if (_zmqc == null)
        {
            _zmqc = new ZMQ.Context(1);
        }

        _recvSocket = _zmqc.Socket(ZMQ.SocketType.REP);
        _recvSocket.Bind("tcp://*:5556");

        while (true)
        {
            if (_queueStop)
            {
                break;
            }

            //Console.WriteLine("Server blocking for receive...");
            var receivedBytes = _recvSocket.Recv();

            if (receivedBytes != null && receivedBytes.Length > 0)
            {
                //Console.WriteLine("Server message received from client, sending OK");
                _recvSocket.Send("OK", Encoding.ASCII);
                //Console.WriteLine("Server OK sent, adding message to queue");
                _queuedMessages.Enqueue(receivedBytes);
            }
            else
            {
                Thread.Sleep(1);
            }
        }
    }

最佳答案

这意味着某人(垃圾收集器?)已经关闭了上下文。

关于c# - ZeroMQ 套接字 Recv() 抛出 'Context was terminated' 异常 - 为什么以及如何恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8022391/

相关文章:

c# - 在 FluentMigrator 上创建表之前检查表是否存在

C# 重载泛型约束

c# - C# 应用程序和 Python 应用程序之间通信的简单方法

java - 如何检查 JZMQ 套接字是否已连接

perl - ZeroMQ,如何在不混合消息的情况下使两个套接字与一个套接字通信

c# - 未引发 clrzmq Socket.ReceiveReady 事件

matlab - 在 MATLAB 中开始使用 JeroMQ

c# - Xceed DataGrid 设置为行 :MultiSelect - How to bind selected row to its MVVM row data

c# - 将webservice的Json格式Response转换

c# - JavaScript 调用页面方法 : error 500. JSON