Java-перевод сообщений ZeroMQ между языками CPPZMQ — JeroMQ — PyZMQ

В C ++ ZMQ Publisher я упаковываю строку в message_t примерно так:

int main()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUB);
socket.bind("tcp://*:5555");
socket.setsockopt(ZMQ_CONFLATE, 1);
std::cout << "Server Up and Sending\n";
while(true)
{
std::string str = "Hello from C++!";
zmq::message_t msg(str.data(), str.length());
bool ret = socket.send(msg);
if(ret)
{
std::cout << "Sending\n";
}
}
return 0;
}

Я пытаюсь выяснить, как получить в JeroMQ (Java ZMQ); вот что у меня так далеко:

  ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.SUB);
socket.connect("tcp://localhost:5555");
socket.subscribe("".getBytes());
while(true)
{
String msg = socket.recvStr();
System.out.println(msg);
}

Также в PyZMQ (Python ZMQ):

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
address = 'tcp://localhost:5555'
socket.connect(address)
socket.setsockopt_string(zmq.SUBSCRIBE, unicode(''))

print "start"print "connecting to ", address

while True:
try:
msg = socket.recv_string()
print msg

Однако ни моя попытка JeroMQ, ни моя попытка PyZMQ не получают мое строковое сообщение.

1

Решение

Попробуйте этот фрагмент кода, подписавшись с :

import zmq
import time

port = "5555"
context = zmq.Context()
socket = context.socket(zmq.SUB)

socket.setsockopt(zmq.SUBSCRIBE, '')
socket.setsockopt(zmq.CONFLATE, 1)  # last msg only.
socket.connect("tcp://localhost:%s" % port)  # must be placed after above options.

while 1:
time.sleep(1)
data = socket.recv()
print data

[НОТА]:

Если это не помогло, удалите следующую строку в своем издателе C ++ ZeroMQ:

socket.setsockopt(ZMQ_CONFLATE, 1);

0

Другие решения

Вы отправляете строку C (без нулевого завершения).

Вы пытаетесь получить строку Python или Java.

Они, вероятно, не совместимы и recvStr / recv_string и, вероятно, блокируют ожидание подробностей о том, где заканчивается строка.

Просто используйте стандартные функции recv (не строковые версии).

0

По вопросам рекламы [email protected]