Socket 伺服器設計核心 傳送訊息的快取

2022-01-30 02:55:55 字數 377 閱讀 3286

伺服器對全域性傳送訊息必須有個快取。原因如下:

假設伺服器的運算瓶頸是每秒鐘傳送100個資訊;如果這個時候伺服器本身產生的傳送訊息資料遠遠大於了這個數量,會導致伺服器宕機,即使不宕機也執行出現異常。

而且有可能突然間訪問量暴增,如果在socket這一層面可以阻止過高的訪問量,那麼剩下的就是運算瓶頸。 這2點相互制約。因此理論上要獲取資訊的過程快,同時檢查運算瓶頸,防止伺服器宕機。

根據這個思路,所有接收的訊息都會被放入乙個全域性佇列,這結構如下:

globalmessagequeuecontroller

:queuequeue; 

這個佇列可以設定乙個無限迴圈,例如只要有資料while(hasdata),就立刻取出傳送;如果沒有資料,則進入等待x秒鐘。

那些不好的Socket伺服器設計

自強的程式猿們都喜歡搞socket,而且覺得最好自己來封裝個元件出來,如果再往上,加入某種資料協議,讓上層伺服器開發照著此協議走,就是乙個小小的框架了。於是,從頭開始,最開始的伺服器的雛形與下圖有一些相似。現在伺服器可以通過socket1到n,分別傳送二進位制資料到達對應的client1到n了,如果...

使用socket讀取伺服器傳送的資料問題

剛剛專案使用到socket進行資料的傳送,其中資料的讀取問題著實 費了老大的勁,以此分享希望能讓有緣人少走彎路。new thread catch ioexception e start 對於使用readline讀取資料的乙個問題就是,無法走到while後面去,究其原因 1.誤以為readline 是...

伺服器模型 socket

伺服器模型 一 迴圈伺服器 迴圈伺服器在同一時刻只可以相應乙個客戶端請求 二 併發伺服器 併發伺服器在同一時刻可以相應多個客戶端的請求.迴圈伺服器 1.udp伺服器 udp迴圈伺服器的實現非常簡單 udp伺服器每次從套接字上讀取乙個客戶端的請求,處理,然後將結果返回給客戶機.可以用下面的演算法來實現...