C# zeromq接收超时,EGAIN正好是第255次
库:c#项目中的clrzmq4() 我使用的是zmq路由器经销商配置。服务器是用python编写的,在linux上运行。我的经销商客户使用c#编写,在windows机器上运行。它发送消息并等待响应C# zeromq接收超时,EGAIN正好是第255次,c#,zeromq,C#,Zeromq,库:c#项目中的clrzmq4() 我使用的是zmq路由器经销商配置。服务器是用python编写的,在linux上运行。我的经销商客户使用c#编写,在windows机器上运行。它发送消息并等待响应 public Boolean sendMessage(Dictionary<String, String> msgDict) { ZError err; String errStr; v
public Boolean sendMessage(Dictionary<String, String> msgDict)
{
ZError err;
String errStr;
var reqFrame = new ZFrame(JsonConvert.SerializeObject(msgDict));
retval = socket.Send(reqFrame, out err);
if (err != null)
{
errStr = String.Format("Error while sending command {3} {0} {1}", err.Text, err.Number, err.Name);
return false;
}
err = null;
respFrame = socket.ReceiveFrame(out err);
if (err != null)
{
errStr = String.Format("Error while receiving response data {0} {1} {2} {3}", err.Text, err.Number, err.Name, num_messages);
return false;
}
return true;
}
公共布尔发送消息(字典msgDict)
{
泽罗错误;
字符串errStr;
var reqFrame=newzframe(JsonConvert.SerializeObject(msgDict));
retval=socket.Send(reqFrame,out err);
if(err!=null)
{
errStr=String.Format(“发送命令{3}{0}{1}时出错”,err.Text,err.Number,err.Name);
返回false;
}
err=null;
respFrame=插座接收框(输出错误);
if(err!=null)
{
errStr=String.Format(“接收响应数据{0}{1}{2}{3}”、err.Text、err.Number、err.Name、num_消息时出错);
返回false;
}
返回true;
}
我将套接字上的sendTimeout和receiveTimeout分别设置为2分钟。
当我一直在255次呼叫sendMessage时,receiveFrame Timeout。在服务器上,我看到消息正在被处理,响应也像每次一样被发送。在这一点之后,我的发送也会超时,并出现相同的错误“EAGAIN”资源暂时不可用
我试过一些东西
我还尝试了另一台linux机器上的经销商客户机,第255次甚至更晚都没有问题 你可能会收到多条信息吗?您可以在
ReceiveFrame
之后检查它们,然后执行bool more=socket.ReceiveMore
。。。如果有,您需要全部接收它们(直到ReceiveMore
返回false)。或者您使用ReceiveMessage
获取ZMessage
,并且msg[0]
是您的ZFrame
感谢您的回复。我尝试了ReceiveMessage并进行了投票,但问题仍然存在。正好是第255次失败。我觉得很奇怪,因为似乎没有其他人有问题。@metadings解决了问题,但还没有解决。当我关闭curve auth时,我可以发送数千条没有问题的消息。当我打开auth时,我被困在255。