前面有幾篇文章介紹過乙個基於linux epoll的網路介面,但並未將介面組合成乙個方便使用的網路框架。
下面先簡單介紹下以前發布過的網路介面:
首先是基本介面:
kendynet.h kendynet.c
此介面提供了最簡單的單執行緒網路收發模型,並未提供封包解包等功能,使用者可在此之上根據自己的需求封裝出合適的網路框架
第二組介面在第一組介面上提供了封包和解包:
connection.h connectionc
這個封裝提供了一種比較高效的封包方式,(封包方式的介紹可參看前面的文章)如果使用者覺得這種封包方式可以滿足需求,可在此之上
封裝合適的網路框架.
最後,也就是本文介紹的主題,利用第二組介面封裝出來的,網路與邏輯分離的多執行緒網路框架.
此框架的核心是乙個訊息佇列,用於在網路層和邏輯層之間通訊,網路層將接收到的資料報,網路事件(連線斷開,新到連線)通過訊息佇列傳送到邏輯層,
供邏輯層處理.邏輯層需要傳送的資料,操作(主動關閉套介面)通過訊息佇列傳送到網路層。所有執行緒之間的同步操作,基本上都圍繞著訊息佇列,使用者
下面貼出簡單的echo測試程式:
#include "netservice.h
"#include
"msg_loop.h
"#include
"datasocket.h
"#include
"systime.h
"int32_t count = 0
;void
server_process_packet(datasocket_t s,rpacket_t r)
void
process_new_connection(datasocket_t s)
void
process_connection_disconnect(datasocket_t s,int32_t reason)
const
char *ip;
uint32_t port;
int main(int argc,char **argv)
netservice_t n = create_net_service(1);//
建立乙個網路服務框架,只使用乙個網路執行緒
net_add_listener(n,ip,port); //
新增監聽
//建立主訊息迴圈物件
msg_loop_t m =create_msg_loop(server_process_packet,process_new_connection,process_connection_disconnect);
while(1
)
return0;
}
乙個遊戲框架
最近一段時間不是很忙,就寫了乙個自己的遊戲伺服器框架雛形,很多地方還不夠完善,但是基本上也算是能夠跑起來了。我先從上層結構說起,一直到實現細節吧,想起什麼就寫什麼。第一部分 伺服器邏輯 伺服器這邊簡單的分為三個部分,客戶端的連線首先到達閘道器伺服器,閘道器這裡有個執行緒用來監聽來自與客戶端的連線,然...
opengoo乙個開源的web office系統
opengoo 是乙個開源的web office,它完全提供了常規的office功能,還能夠通過網路發布和管理文件,目前 支援 text documents spreadsheets coming soon presentations task lists e mails calendars web...
如何熟悉乙個開源專案?
如何熟悉乙個開源專案?你去了解某個東西。怎麼下手呢?如何開始呢?我的習慣是這樣 1.首先,查詢和閱讀該項目的部落格和資料,通過google你能找到某個專案大體介紹的部落格,快速閱讀一下就能對專案的目的 功能 基本使用有個大概的了解。2.閱讀專案的文件,重點關注類似 getting started e...