Socket的綜合應用總結

2021-09-07 04:54:11 字數 2521 閱讀 5169

socket 的傳輸的內容大概分3種:

封裝的結構體:結構體(結構清晰,傳送資料占用記憶體小),例如

struct socketdata

此處也是對內容的簡單的描述,真正的結構體可能更加複雜

char*(顯而易見的,支援指令),例如

傳送的字串為"23,張三,10000",這樣的內容的弊病在於很容易別解析,安全性低

超文字(支援指令碼,類似xml,記憶體使用增加).可以結合1來綜合運用,思路是很好的。

收發機制:封包,粘包。send sendlist, recv recvlist

向伺服器一直傳送資料的話,傳送的內容不平均,有時內容較大,有時內容較小,一直連線對鏈路的負載也較大,所以我們在固定的時間間隔下傳送資料,把要傳送的資料存在乙個鍊錶中,集體傳送,這樣大大提高效能,傳送的時間間隔根據遊戲的情況而定,魔獸爭霸為100ms,魔獸世界為200ms。

執行緒管理:

1、確保主線程不死

2、一段時間間隔看子執行緒是否死亡

3、socket類封裝:

serversocket

clientsocket

netcom    (訊息底層,可用socket或是directplay等等)

netmessage(訊息巨集和結構體)

netmanager(訊息處理)

4、socket安全

5、socket其他功能:連包,粘包

時間問題:加時間戳,邏輯不通過時間判斷

總結 socket伺服器端的設計:

伺服器還是利用socket的完成埠來實現,首先建立伺服器的socket。

然後建立accept執行緒,當有客戶端accept時,加入到客戶端列表中,然後非同步呼叫wsarecv。

根據cpu個數建立接受資料的執行緒,接收的資料儲存到鍊錶中。

處理接受到的資料時用乙個單獨的執行緒遍歷其中的內容,用訊號量控制。

#define maxmessagesize 1024

enum

socketoperate

;struct

socketdata

};struct

cclientpeer

};class

cserversocket

;socket createserversocket(

intport);

dword winapi socketprocmain(lpvoid lpparam);

//socket主線程函式,負責處理io請求

dword winapi socketprocaccept(lpvoid lpparam); //

socket執行緒函式,負責處理執行緒鏈結

cserversocket::cserversocket(

void

)cserversocket::~cserversocket(void

)socket createserversocket(

intport)

ires = listen(tempsocket, 2000

);

if(ires ==socket_error)

return

tempsocket;

}bool

cserversocket::create( u_short port )

mport =port;

mcp = createiocompletionport(invalid_handle_value, null, 0, 0

); system_info systeminfo;

getsysteminfo(&systeminfo);

for (int i = 0; i)

createthread(null, null, socketprocaccept,

this

, null, null);

sleep(5);

return

true;}

dword winapi socketprocmain(lpvoid lpparam)

//當資料型別為sorecv時,

if(lpsocketdata->operationtype ==sorecv)

else}}

}dword winapi socketprocaccept(lpvoid lpparam)

}class

cnetmanager

;dword winapi recvproc(lpvoid pparam);

bool

cnetmanager::createserver()

dword winapi recvproc( lpvoid pparam )

cserversocket *pserver = (cserversocket*)pparam;

cclientpeer *pclient;

while(1

)

pclient->gclientrecv->clear();}}

}}

mysql的綜合應用 MySQL的綜合應用學習筆記

避免寫入直接運算元據檔案 利用日誌來實現間接寫入 mysql共有5種日誌,其中只能redo日誌和undo日誌與事務有關。事務機制 rdbms sql語句 事務 acid 事務是乙個或者多個sql語句組成的整體,要麼全部執行成功,要麼全部執行失敗。管理事務 預設情況下,mysql執行每條sql語句都會...

元組的綜合應用

使用元組給變數賦值 t westos 11,100 定義元組 t name,age,score t 元組中的元素賦到變數中 print name,age,score 列印輸出變數 使用sort 方法給元組中的元素間接排序 scores 100,89,45,78,65 定義乙個元組 scoreli l...

表單處理的綜合應用

例項 4 9 表單處理的綜合應用 通過以上的介紹,相信讀者已經了解了php 中大致的表單資訊處理過程。接下來編寫本 章開頭介紹的 4 1 中的處理檔案 showdetail.php 該檔案實現的功能就是把使用者提交的 資料輸出出來。如果學習了資料庫之後,就可以方便地將資料儲存到資料庫中。歡迎光臨本 ...