簡體   English   中英

處理TCP / IP套接字上的多個請求

[英]Handling multiple requests on a TCP/IP Socket

在Java TCP / IP套接字上處理多個請求是否相當容易。 只需接受一條消息並生成一個線程。 接受另一條消息並生成另一個線程。 事情是,一旦你開始產生線程,事情變得更加不確定。 假設你有10個客戶端,一個客戶端一直在發送請求,而其他9個客戶發送請求占10%的多動客戶端,發現它更難以查看。

您可以處理此問題的一種方法是在服務器中使用信號量的哈希映射,其中每個客戶端都有相應的信號量。 在處理任何客戶端的請求之前,您可以使其通過其信號量並配置信號量,以便每個客戶端在任何時候都只能有一定數量的請求。

在這個階段,我在想是的,但有沒有更好的方法或圖書館這樣做?

......但是有更好的方法......?

我使用每個serversocket一個接受線程和一個預生成線程池來處理工作負載。 接受線程只接受連接(不執行任何操作)並將處理程序套接字提供給池中的一個線程。 該線程然后使用handler-socket直到客戶端完成,然后關閉handler-socket。

您可以根據需要擴展此設置:如果您注意到接受線程大多數時間都在等待池線程,那么您需要x2池池線程數,如果您注意到接受 - thread是你創建的瓶頸(A)另一個接受線程和(B)另一個接受連接的套接字,並且可選地(C)將它們放在另一台機器上。

如果客戶端比其他客戶端更重要,則可以預期/期望您使用一個超級活動客戶端描述的特定問題:在這種情況下,您必須不執行任何操作。 或者它可以被視為拒絕服務攻擊,在這種情況下,您應該有一個啟發式,只是斷開客戶端並暫時禁止其IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM