2014-02-14 172 views
0

我正在開發基於套接字的web服務(套接字客戶端)和外部服務器之間的通信。由於webservices是多線程的(服務器爲每個服務請求創建一個線程),每個線程應該在外部服務器上打開一個新的套接字(在給定的端口上),還是應該在Web服務線程之間同步和共享套接字客戶端。 我在這裏感到困惑。打開的客戶端Socket(java.net.Socket的對象)是一個昂貴的對象,如JDBC Connection,或者它可以(應該)由每個線程打開並在完成時由線程關閉。基於Webservice的套接字客戶端

請幫

感謝

回答

0

如果你談論的是爲每一個請求到服務器中創建客戶端的新Socket,然後就是做正確的方式。

這正是具有標籤的瀏覽器也是如此。

擁有一個同步的Socket意味着您需要有一個線程名稱/ ID,請求URL /或任何其他唯一ID或任何其他ID的映射/表來標識請求來自哪個線程以及哪個線程響應必須轉發給。這肯定會遇到性能問題,而且不可擴展。

+0

在所有線程共享相同套接字的情況下,我可以使用blockQueues。由於線程可以產生請求並消費響應,我可以讓singleton組件說「Soketer」持有套接字並且有兩個BlockQueue(傳入和傳出)。傳出隊列上的任何消息都寫入套接字,並且來自套接字的任何消息都會發送到傳入隊列。所有線程都有對Sockert對象的引用。 – amique