2013-07-18 95 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