Соединение с подписчиком JeroMQ разрывается при получении в Matlab

Используя JeroMQ в Matlab, мое соединение с подписчиком обрывается, когда я пытаюсь 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, показывающий закрытие соединения

Я не знаю точно, поможет ли это, но я исследовал это,

socket.setSocketOpt(ZMQ.ZMQ_TCP_KEEPALIVE,1)

но Matlab сообщает, что ZMQ_TCP_KEEPALIVE является нераспознанной функцией или переменной.

Я в долгу перед людьми из этой темы за то, что они меня начал с правой ноги с JeroMQ в Matlab.


person Kristen Lancaster    schedule 04.12.2019    source источник


Ответы (1)


Я провел дополнительные исследования и учел предложения друзей на Github. Оказывается, мой сокет закрывался только позже в коде моей функции close(). Вот мой рабочий код для тех, кто хочет начать использовать JeroMQ в Matlab. Кажется, что часть кода в других сообщениях устарела.

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();
person Kristen Lancaster    schedule 22.01.2020