2015-10-27 152 views
0

從我所瞭解的(如果我錯了,請糾正我),在tomcat中按順序處理傳入的websocket消息。這意味着如果您在一個websocket中有100個傳入消息,它們將僅使用從消息1到消息100的一個線程逐個進行處理。在tomcat中使用多線程處理websocket消息消息

但這不適用於我。我需要在websocket中同時處理傳入的消息以增加我的websocket吞吐量。進入的消息不依賴於彼此,因此不需要按順序處理。

問題是如何配置tomcat,以便它可以爲每個websocket分配多個工作線程以同時處理傳入的消息?

任何提示表示讚賞。


這是在tomcat code,我認爲這是每個WebSocket連接阻塞(這是有道理的):

/** 
* Called when there is data in the ServletInputStream to process. 
* 
* @throws IOException if an I/O error occurs while processing the available 
*      data 
*/ 
public void onDataAvailable() throws IOException { 
    synchronized (connectionReadLock) { 
     while (isOpen() && sis.isReady()) { 
      // Fill up the input buffer with as much data as we can 
      int read = sis.read(
        inputBuffer, writePos, inputBuffer.length - writePos); 
      if (read == 0) { 
       return; 
      } 
      if (read == -1) { 
       throw new EOFException(); 
      } 
      writePos += read; 
      processInputBuffer(); 
     } 
    } 
} 

回答

1

您不能配置Tomcat的做你想做什麼。您需要編寫一個消息處理程序,它將消息傳遞給Executor(或類似的處理),然後返回。