通过 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/