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 1024enum
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 該檔案實現的功能就是把使用者提交的 資料輸出出來。如果學習了資料庫之後,就可以方便地將資料儲存到資料庫中。歡迎光臨本 ...