我正在学习在android中使用zeromq轮询。我在android程序(客户端)中的req套接字和子套接字上进行轮询。这样客户端就可以收到来自服务器的回复消息以及已发布的消息。
我的投票无效。 req套接字和发布套接字都不会被轮询。如果我不使用轮询,则套接字都会收到消息。
我尝试在线搜索但找不到任何相关内容。 客户端代码是这样的:
public void run()
{
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket reqsocket = context.socket(ZMQ.REQ);
ZMQ.Socket subsocket =context.socket(ZMQ.SUB);
reqsocket.connect("tcp://10.186.3.174:8081");
subsocket.connect("tcp://10.186.3.174:8083");
subsocket.subscribe("".getBytes());
byte[] receivedmessage;
Poller poller=context.poller();
poller.register(reqsocket,Poller.POLLIN);
poller.register(subsocket,Poller.POLLIN);
reqsocket.send(msg.getBytes(),0);
while(!Thread.currentThread().isInterrupted())
{
if(poller.pollin(0))
{
receivedmessage=s.recv(0);
}
if(poller.pollin(0))
{
receivedmessage=subsocket.recv(0);
}
}
s.close();
context.term();
}
我错过了什么或做错了什么?
答案 0 :(得分:3)
看起来这有3个问题。
主要的一个是你需要在poller.poll()
循环中调用while
作为第一件事。这就是为什么你没有得到任何消息。
下一个问题是你要检查两个套接字的相同索引:我希望第二个if
语句需要
if(poller.pollin(1))
最后,req套接字需要在每次接收之前发送,因此对send的调用需要在while循环内,并且在上面添加的poller.poll()
之前:)< / p>