在jeromq中使用轮询

时间:2013-07-18 17:30:54

标签: android zeromq jeromq

我正在学习在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();

}

我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:3)

看起来这有3个问题。 主要的一个是你需要在poller.poll()循环中调用while作为第一件事。这就是为什么你没有得到任何消息。

下一个问题是你要检查两个套接字的相同索引:我希望第二个if语句需要

if(poller.pollin(1))

最后,req套接字需要在每次接收之前发送,因此对send的调用需要在while循环内,并且在上面添加的poller.poll()之前:)< / p>