【问题标题】:Java : zeromq , try to set response timeout in MT serverJava:zeromq,尝试在 MT 服务器中设置响应超时
【发布时间】:2015-07-22 22:53:06
【问题描述】:

我使用 ZeroMQ 到客户端/服务器应用程序, 现在在我的 MT 服务器中,我尝试设置超时,我尝试在服务器上设置:

socket.setReceiveTimeOut(2000);
socket.setSendTimeOut(2000);

没有运气,我如何设置响应超时。

这是我的多线程服务器代码,取自 mt 服务器的 zeromq 示例:

/*
 *  Multithreaded Hello World server in Java
 *
 *  @author Vadim Shalts
 *  @email vshalts@gmail.com
 *
 */

import org.zeromq.ZMQ;
import org.zeromq.ZMQQueue;

class mtserver {
   static void main(String[] args) {

      final ZMQ.Context context = ZMQ.context(1);

      ZMQ.Socket clients = context.socket(ZMQ.ROUTER);
      clients.bind ("tcp://*:5555");

      ZMQ.Socket workers = context.socket(ZMQ.DEALER);
      workers.bind ("inproc://workers");

      for(int thread_nbr = 0; thread_nbr < 5; thread_nbr++) {
         Thread worker_routine = new Thread() {

            @Override
            public void run() {
               ZMQ.Socket socket = context.socket(ZMQ.REP);
               socket.connect ("inproc://workers");

               while (true) {

                  //  Wait for next request from client (C string)
                  byte[] request = socket.recv (0);
                  System.out.println ("Received request: ["+new String(request,0,request.length-1)+"]");

                  //  Do some 'work'
                  try {
                     Thread.sleep (1000);
                  } catch(InterruptedException e) {
                     e.printStackTrace();
                  }

                  //  Send reply back to client (C string)
                  byte[] reply = "World ".getBytes();
                  reply[reply.length-1] = 0; //Sets the last byte of the reply to 0
                  socket.send(reply, 0);
               }
            }
         };
         worker_routine.start();
      }
      //  Connect work threads to client threads via a queue
      ZMQQueue zMQQueue = new ZMQQueue(context,clients, workers);
      zMQQueue.run();

      //  We never get here but clean up anyhow
      clients.close();
      workers.close();
      context.term();
   }
} 

【问题讨论】:

  • 你确定超时是毫秒而不是秒吗?
  • 我希望我能告诉你,但我在哪里找不到此信息...没有 java 文档

标签: java timeout zeromq


【解决方案1】:

为什么需要超时?原始示例不使用它。

【讨论】:

  • 这个例子是简单的例子来展示简单的MT服务器,用这个。现在我需要在客户端死机时实现超时。
【解决方案2】:

为什么需要服务器超时?

在客户端设置超时的自然位置。

socket.setReceiveTimeOut(int milliseconds); 在客户端工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多