在 Matlab 中进行接收时,JeroMQ 订阅者连接中断

Posted

技术标签:

【中文标题】在 Matlab 中进行接收时,JeroMQ 订阅者连接中断【英文标题】:JeroMQ subscriber connection breaks when recv-ing in Matlab 【发布时间】:2019-12-04 15:51:50 【问题描述】:

在 Matlab 中使用 JeroMQ,当我尝试 recv 一条消息时,我的订阅者连接断开。我已经用 Wireshark 验证了这一点。我还注意到 TCP 连接的关闭是由我的订阅端口而不是发布端口发起的。

javaclasspath('jeromq-0.5.1.jar')
import org.zeromq.*;

ctx = zmq.Ctx();
socket = ctx.createSocket(ZMQ.SUB);
socket.connect('tcp://127.0.0.1:5996')
message = socket.recv(1) %this is when the connection gets dropped

Wireshark screenshot showing connection being closed

我不确定它是否会有所帮助,但我已经使用它进行了调查,

socket.setSocketOpt(ZMQ.ZMQ_TCP_KEEPALIVE,1)

但是 Matlab 报告说 ZMQ_TCP_KEEPALIVE 是一个无法识别的函数或变量。

感谢 this 线程上的人们让我在 Matlab 中正确使用 JeroMQ。

【问题讨论】:

【参考方案1】:

我做了更多的研究,并考虑了一些朋友在Github 的建议。事实证明,我的套接字直到稍后在我的 close() 函数的代码中才关闭。这是我的工作代码,供希望在 Matlab 中开始使用 JeroMQ 的其他人使用。似乎其他帖子上的一些代码已经过时了。

javaclasspath('jeromq-0.5.1.jar')
import org.zeromq.*;

%subscribe to ZMQ feed
context = ZContext();
socket = context.createSocket(ZMQ.SUB); 
success = false;
while(~success)
    success = socket.connect('tcp://127.0.0.1:5996');
end
socket.subscribe("");
socket.setTCPKeepAlive(1);

%receive a message
message = socket.recv(0); %nonblocking receive uses argument (1)

%when done
socket.close();

【讨论】:

以上是关于在 Matlab 中进行接收时,JeroMQ 订阅者连接中断的主要内容,如果未能解决你的问题,请参考以下文章

xmpp strophe 用户注销时接收通知订阅

Redis发布订阅使用方法

RedisRedis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )

基于迫零准则的自适应线性均衡器的MATLAB仿真

如何在接收响应时通过 websocket 发送请求

使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态