我们在VB.NET下使用ZeroMQ进行测试,在使用发布/订阅套接字时有一个奇怪的效果。当我们在调试模式下编译时,一切都运行得很好。在发布时,子程序员会得到一个socket.Receivestatus=Interrupted。代码片段:
Dim context = ZmqContext.Create
Dim socket = context.CreateSocket(SocketType.SUB)
socket.SubscribeAll()
socket.Connect("tcp://127.0.0.1:5550")
socket.ReceiveTimeout = TimeSpan.FromMilliseconds(1000)
socket.ReceiveHighWatermark = 1000
Console.WriteLine("Listening...")
While True
Dim msg As String
msg = socket.Receive(Encoding.Unicode)
Select Case socket.ReceiveStatus
Case ReceiveStatus.Interrupted
Console.WriteLine("Status={0}", socket.ReceiveStatus)
....就我们现在所能看到的,它与每条消息的长度有关;如果它很小(<100字节),一切都在Debug & Release-Mode下工作。如果我们假设每条消息有2000个字节,那么只收到137条消息,然后就会出现错误。
我们通过NuGet (package id="clrzmq“version="3.0.0-rc1")安装了ZeroMQ。我们检查了32位和64位-相同的行为。
有什么想法吗?
发布于 2015-04-18 16:05:09
我想我发现了:你必须关闭项目-设置...编译...高级选项下的“优化”-Checkbox。在那次更改之后,一切都运行得很好。
我的建议:行为将在未来的ZeroMQ版本中修复,就像有人忘记禁用此选项一样,系统将在测试(调试)-Conditions下工作,但在实时(发布)中失败。
https://stackoverflow.com/questions/29709698
复制相似问题