2013-07-18 41 views
1

我正在学习在android中使用zeromq轮询。我在android程序(客户端)上的req套接字和子套接字轮询。这样这个客户端可以接收来自服务器的回复消息以及发布的消息。在jeromq中使用轮询

我的轮询不起作用。 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(); 

}

我失去了一些东西或者做错了什么?

回答

3

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

下一个问题是,你正在检查的同一指标为两个插槽:我预计第二if声明必须

if(poller.pollin(1)) 

最后,REQ插座需要每前接收发送,所以发送的呼叫需要在while循环内,并且在上面刚添加的poller.poll()之前:)

+0

谢谢,我做了更改并且工作正常。 – user1715513

+0

如何使用jeromq进入android?它与Java Se一样吗?我正在寻找如何去做,什么都没有。 – BlaShadow