主協程:負責接收客戶端的連接,放至連接通道中去。
讀協程組:負責從連接通道中取連接,並讀到客戶端的數據,讀完後放至工作數據通道中去。
(包含客戶端的連接socket和讀到的數據)
工作協程組:負責從工作數據通道中取數據,做相應工作,比如:網絡相關,數據庫相關等操作,工作協程組將返回數據準好後放至寫數據通道中去。
(包含客戶端的連接socket和要返回的數據)
寫協程組:負責從寫數據通道中拿寫數據,負返回給客戶端。如果是短連接就關閉socket,如果是長連接不關閉。
讀,寫,處理完全分離。這樣設計達到異步處理。
生產者消費者模型。
通道也可以建多個以組id,組成員實例id來區分。
協程也可以建多個以組id,組成員實例id來區分。
消息傳送的時候以id來區分發送至哪組通道的哪個通道。
通道中的數據類型以指針型爲主,防止過多的數據拷貝。
數據庫連接可以有連接池,第三方網絡連接也可以有連接池,或跟協程綁定的連接。
前端處理過程如上,後端可以與前端建立長連接,達到複用連接。
如果是同步處理只能是在協程中讀取客戶端請求,做相關處理工作,做完後將結果返回給客戶端。