我使用Tomcat中8 JSR-356 WebSocket的支持,從而推動我工作的應用程序。到目前爲止,它看起來像所有的消息都在一個線程中處理。雖然我明白這背後的原因 - 以及爲什麼websockets以這種方式實現,是否有任何方法可以使用ExecutorService
來處理進來的消息(而不是在我的代碼中創建ExecutorService)?Tomcat的8 JSR 356的WebSocket線程
這將允許具有1個(或僅少數)網絡選擇器線程(以支持大量連接的客戶端)的可擴展性,同時允許對實際消息進行標準的基於線程的處理(當消息需要時爲客戶處理)。
我看不出有什麼特別,將允許這種改變。
好吧,你是說它確實使用線程池來處理傳入數據?每個客戶端是否有最多一個線程? –
我問,因爲當我測試時,它看起來像第二條消息正在等待第一個完成處理。但是,我們都是從同一個會話發出的(也許這就是爲什麼)。附註:很好的答案 –
分配給每個客戶端處理數據的線程不會超過一個。如果一個客戶端發送多個消息,那麼它們將按順序處理 - 可能是由相同的線程處理。當線程完成第一條消息時,它會查看是否有更多數據要讀取。如果有,它會讀取它。如果沒有,套接字將返回到選擇器/輪詢器,直到更多數據到達。數據必須以這種方式處理。在有更多線程的地方,一旦消息(或部分消息)準備好傳遞給應用程序,就可以在新線程中完成(但不是)。 –