【问题标题】:Using polling in jeromq在 jeromq 中使用轮询
【发布时间】:2013-07-18 17:30:53
【问题描述】:

我正在学习在 android 中使用 zeromq 轮询。我正在对 android 程序(客户端)中的 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();

}

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

【问题讨论】:

    标签: android zeromq jeromq


    【解决方案1】:

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

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

    if(poller.pollin(1))
    

    最后,req 套接字需要在 每个 接收之前发送,因此对发送的调用需要在 while 循环内,并且在您刚刚添加的 poller.poll() 之前:)

    【讨论】:

    • 如何在 android 中使用 jeromq?和 Java Se 一样吗?我一直在寻找如何做到这一点,但一无所获。
    猜你喜欢
    • 2023-04-05
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2015-02-26
    相关资源
    最近更新 更多