android - 在 jeromq 中使用轮询

标签 android zeromq jeromq

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

我的投票无效。请求套接字和发布套接字都不会被轮询。如果我不使用轮询,两个套接字都会收到消息。

我尝试在线搜索但找不到任何相关内容。 客户端代码是这样的:

    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 个问题。 最主要的是您需要调用 poller.poll() 作为 while 循环中的第一件事。这就是您收不到任何消息的原因。

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

if(poller.pollin(1))

最后,req socket 需要在every receive 之前发送,所以发送调用需要在 while 循环内,在 poller.poll() 之前你刚刚在上面添加了 :)

关于android - 在 jeromq 中使用轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730276/

相关文章:

安卓:DialogFragment.dismissInternal 处的 NullPointerException 处 DialogFragment.dismissAllow

android - onServiceConnected() 未调用

c# - ZeroMQ C#HelloWorld示例

python - 零RPC : How to expose a module

java - Java ZeroMQ的Poller消耗堆内存越来越多

android - 将 Xcode 键绑定(bind)导入 IntelliJ IDEA

java - 从 ListView 获取子项会导致 android.view.View android.view.View.findViewById(int) 出现空对象引用

c - 大文件上传到基于 libevent 的 HTTP 服务器

java - 干净地中断 zeromq 轮询线程

multithreading - 可运行的 JeroMQ 订阅者