В 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 не получают мое строковое сообщение.
zmq_setsockopt(socket, ZMQ_SUBSCRIBE)
(не знаю, каков правильный синтаксис). Возможно, выполнениеsocket.subscribe
делает то же самое, я не знаю. - person Henri Menke   schedule 30.06.2017socket.subscribe("".getBytes());
является эквивалентом JeroMQ CPPZMQ:socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);
Эквивалент PyZMQ:socket.setsockopt_string(zmq.SUBSCRIBE, unicode(''))
- person Paul McElroy   schedule 30.06.2017unicode('')
наu""
. (Конечно, я также добавил веткуexcept
, которая отсутствует в вопросе) - person Henri Menke   schedule 30.06.2017