SocketIO多线程卡死问题

0

最近公司需要用mediasoup实现一套媒体服务,本着快速开发所以服务端我还是使用了NodeJS开发,所以选择SocketIO作为信令通道。
但是接入安卓的时候出现一个奇怪的问题就是socket.emit使用ack回调的时候,使用future总是get那里卡死了。
后来看了Java实现的SocketIO的EventThread的代码实现发现里面用的是一个单线程的线程池。
这样就有个问题,就是如果我的ack回调如果调用一个方法这个方法里面也有一个ack回调,就会导致后面的ack等待前一个ack回调结束,get等到就会直接阻塞整个过程。

    public static void nextTick(final Runnable task) {
        ExecutorService executor;
        synchronized (EventThread.class) {
          counter++;
          if (service == null) {
              service = Executors.newSingleThreadExecutor(THREAD_FACTORY);
          }
          executor = service;
        }

        executor.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    task.run();
                } catch (Throwable t) {
                    logger.log(Level.SEVERE, "Task threw exception", t);
                    throw t;
                } finally {
                    synchronized (EventThread.class) {
                        counter--;
                        if (counter == 0) {
                            service.shutdown();
                            service = null;
                            thread = null;
                        }
                    }
                }
            }
        });
    }