darwin之socket訊息處理效能問題研究

2021-08-11 21:08:06 字數 1063 閱讀 6096

windows下darwin接收到socket訊息如何處理?

所有的socket訊息入口只有乙個執行緒,而且是單執行緒:void eventthread::entry().

這個執行緒不斷地遍歷所有註冊到視窗的socket訊息(每乙個新的socket,註冊到視窗的訊息id不同).

此處的單執行緒迴圈處理所有客戶端的訊息,是否能達到高效能,個人感覺不能(上百萬客戶端,僅僅靠單執行緒捕獲訊息) 。

當訊息到達後,在eventthread中僅僅是呼叫了乙個耗時極短的函式:processevent。

在eventcontext中,該函式將任務放到taskthread佇列中(讓執行緒池去處理訊息),後直接返回。

事實上,通過除錯發現,eventthread執行緒獲監聽的訊息絕大多數為:fd_read | fd_accept | fd_close,對於

其他訊息如:fd_write的訊息是很少去註冊,直接傳送資料到客戶端即可。想想也是,rtsp流**伺服器,不會主動發訊息給客戶端,都是

接收到fd_read訊息後,去響應該訊息而將資料傳送給客戶端。fd_write訊息很少註冊將大大降低eventthread執行緒的工作壓力,

當多個客戶端同時從伺服器上接收rtsp流時,eventthread執行緒壓力很低,因此此過程中讀訊息(fd_read | fd_accept | fd_close)

很少發生。 

但是當有多個rtsp推流器,將資料流推送到darwin伺服器上時,伺服器將頻繁的收到fd_read訊息,因此壓力會很大。伺服器同時支援多少個推送客戶端推送rtsp資料流,需要進一步測試。

darwin之角色管理

在rtspsession中,建立 qtss roleparams froleparams變數,該變數 聯合體 用來賦值模組的角色引數.在rtspsession中,使用聯合體中froleparams.rtsprequestparams來設定rtsp角色引數 呼叫模組方法 模組的角色 enum type...

socket接收訊息

標頭檔案在主頁 編譯方式 gcc server.c o server執行方式 server 埠號程式主體 int main int argc,char ar server 埠 建立udp套接字 fd socket af inet,sock dgram,0 準備跟af inet 即ipv4網路層協議 ...

darwin之列舉值得組合使用(Task)

乙個task可以有多個flag kalive 0x80000000,二進位制 1000 0000 0000 0000 0000 0000 0000 0000 kaliveoff 0x7fffffff 二進位制 0111 1111 1111 1111 1111 1111 1111 1111 getev...