第三次總結(jié)

第四章:

socket函數(shù):

為了執(zhí)行網(wǎng)絡(luò)I/O,一個(gè)進(jìn)程必須做的第一件事是調(diào)用socket函數(shù),指定希望同學(xué)的協(xié)議類型,

int socket(int family, int type, int protocol); 成功返回非負(fù)描述符,錯(cuò)誤返回-1;

參數(shù) family:

AF_INET IPv4協(xié)議

AF_INET6 IPv6協(xié)議

AF_LOCAL Unix域協(xié)議

AF_ROUTE 路由套接字

AF_KEY? 秘鑰套接字

參數(shù)type:

SOCK_STREAM: 提供面向連接的穩(wěn)定數(shù)據(jù)傳輸,即TCP協(xié)議。

OOB: 在所有數(shù)據(jù)傳送前必須使用connect()來建立連接狀態(tài)。

SOCK_DGRAM: 使用不連續(xù)不可靠的數(shù)據(jù)包連接, 即UDP協(xié)議。

SOCK_SEQPACKET: 提供連續(xù)可靠的數(shù)據(jù)包連接。

SOCK_RAW: 提供原始網(wǎng)絡(luò)協(xié)議存取。

SOCK_RDM: 提供可靠的數(shù)據(jù)包連接。

SOCK_PACKET: 與網(wǎng)絡(luò)驅(qū)動(dòng)程序直接通信。

參數(shù)protocol:

IPPROTO_TCP : TCP 傳輸協(xié)議

IPPROTO_UDP : UDP 傳輸協(xié)議

IPPROTO_SCTP? : SCTP 傳輸協(xié)議

connect函數(shù):

TCP客戶用connect函數(shù)來建立與TCP服務(wù)器的連接。

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);成功返回0 錯(cuò)誤返回-1;

bind函數(shù):

bind函數(shù)把一個(gè)本地協(xié)議地址賦予一個(gè)套接字。對(duì)于網(wǎng)際網(wǎng)協(xié)議,協(xié)議地址是32位的IPv4地址或者128位的IPv6地址與16位的TCP或UDP端口號(hào)的組合。

int bind(int socketfd, const struct sockaddr *myaddr, socklen_t addr) 成功返回0 錯(cuò)誤返回-1。

listen函數(shù):

listen函數(shù)僅由服務(wù)器調(diào)用,當(dāng)socket函數(shù)創(chuàng)建一個(gè)套接字時(shí),listen函數(shù)把一個(gè)未連接的套接字轉(zhuǎn)化成一個(gè)被動(dòng)套接字。第二個(gè)參數(shù)規(guī)定了內(nèi)核應(yīng)該為響應(yīng)套接字排隊(duì)的最大連接數(shù)。

int listen(int sockfd, int backlog) 成功返回0 錯(cuò)誤返回-1。

accept函數(shù):

由TCP服務(wù)器調(diào)用,用于從已完成連接隊(duì)列頭返回下一個(gè)已完成連接。如果已完成隊(duì)列為空,那么進(jìn)程被投入睡眠。

int accept(int sockfd, struct sockaddr * cliaddr, socklen_t addrlen);成功返回非負(fù)描述符,錯(cuò)誤去返回-1。

close函數(shù):

關(guān)閉描述符。

int close(int sockfd); 成功返回0 失敗返回-1;

第六章:

阻塞式I/O:

進(jìn)程調(diào)用recvfrom, 其系統(tǒng)調(diào)動(dòng)直到數(shù)據(jù)報(bào)達(dá)到且被復(fù)制到應(yīng)用進(jìn)程的緩沖區(qū)中或者發(fā)生錯(cuò)誤才返回。我們說進(jìn)程在從調(diào)用recvfrom開始到它返回的整段時(shí)間內(nèi)是被阻塞的。recvfrom成功返回后,應(yīng)用進(jìn)程開始工作。

非阻塞式I/O:

進(jìn)程把一個(gè)套接字設(shè)置成非阻塞是在通知內(nèi)核:當(dāng)所請(qǐng)求的I/O操作非得把本進(jìn)程投入睡眠才能完成時(shí),不要把本進(jìn)程投入睡眠,而是返回一個(gè)錯(cuò)誤,當(dāng)無數(shù)據(jù)報(bào)準(zhǔn)備好的時(shí)候返回一個(gè)錯(cuò)誤,當(dāng)有數(shù)據(jù)報(bào)準(zhǔn)備好的時(shí)候返回成功。

I/O復(fù)用模型:

select和poll模型,阻塞在這2個(gè)系統(tǒng)調(diào)用中的某一個(gè)智商,而不是阻塞在正在真正的I/O系統(tǒng)調(diào)用上。

信號(hào)驅(qū)動(dòng)式I/O模型:

讓內(nèi)核在描述符就緒式發(fā)送SIGIO信號(hào)通知我們。

異步I/O模型:

告知內(nèi)核啟動(dòng)某個(gè)操作(包括數(shù)據(jù)從內(nèi)核復(fù)制我們自己的緩沖區(qū)),并讓內(nèi)核在整個(gè)操作完成后通知我們。

同步I/O和異步I/O對(duì)比:

同步I/O操作導(dǎo)致請(qǐng)求進(jìn)程阻塞,知道I/O操作完成;同步I/O包括阻塞式I/O,非阻塞式I/O,I/O復(fù)用模型:,信號(hào)驅(qū)動(dòng)式I/O模型,

異步I/O操作不導(dǎo)致請(qǐng)求進(jìn)程阻塞。異步I/O包括異步I/O模型。

select函數(shù):

select告知內(nèi)核中哪些描述符就緒(讀,寫或異常條件)

int select(int maxfdp1, fd_set *readset, fd_set * writeset, fd_set *exceptset, const struct timeval * timeout);

maxfdp1是指最大描述符數(shù)量,readset是可讀描述符集合,writeset是可寫描述符集合,exceptset是可接受連接描述符集合,timeval是設(shè)置select的時(shí)間設(shè)置。


kbengine

服務(wù)器目錄結(jié)構(gòu):

|- kbengine (KBE_ROOT 根目錄)

|- assets (默認(rèn)的游戲項(xiàng)目資產(chǎn)庫(kù),你可以添加新的資產(chǎn)庫(kù)通過環(huán)境變量綁定)

|- res (所有資源文件)

|- spaces (通常存放游戲場(chǎng)景相關(guān)的資源,例如Navmesh)

|- server (通常放置服務(wù)端相關(guān)的配置文件)

|- scripts (所有的游戲邏輯,Python文件)

|- base (Base的Python邏輯)

|- cell (Cell的Python邏輯)

|- client (Client的Python邏輯)

|- bots (機(jī)器人的Python邏輯,壓力測(cè)試)

|- common (邏輯公共文件夾)

|- data (游戲邏輯用到的數(shù)據(jù)資源)

|- db (dbmgr擴(kuò)展腳本)

|- entity_defs (實(shí)體定義與聲明)

|- interfaces (實(shí)體的接口聲明)

|- server_common (服務(wù)端邏輯公共)

|- user_type (自定義用戶類型目錄)

|- kbe (引擎目錄)

|- tools (引擎工具)

|- server (引擎服務(wù)端工具)

|- guiconsole (可視化的控制臺(tái)工具)

|- install (引擎安裝工具)

|- pycluster (跨平臺(tái)的集群控制Python腳本工具)

|- xlsx2py (游戲數(shù)據(jù)表導(dǎo)出工具)

|- src (KBEngine源代碼)

|- build (makefile公共腳本)

|- client (客戶端插件和例子目錄)

|- kbengine_dll (Windows應(yīng)用程序插件源代碼)

|- common (公共目錄)

|- lib (各種模塊源代碼)

|- client_lib (客戶端底層公共框架)

|- cstdkbe (KBEngine標(biāo)準(zhǔn)庫(kù))

|- db_mysql (Mysql存取實(shí)現(xiàn))

|- dbmgr_lib (數(shù)據(jù)存取公共接口)

|- dependencies (依賴庫(kù))

|- entitydef (實(shí)體定義解析模塊)

|- helper (一些通用的協(xié)助性模塊)

|- math (數(shù)學(xué)相關(guān))

|- navigation (2D/3D導(dǎo)航模塊)

|- network (網(wǎng)絡(luò)模塊)

|- pyscript (腳本插件)

|- python (python源代碼)

|- resmgr (資源管理器)

|- server (服務(wù)端公共模塊)

|- thread (多線程模塊)

|- xmlplus (xml解析庫(kù))

|- libs (編譯后的*.lib, *.a文件)

|- server (服務(wù)端app源代碼)

|- baseapp (baseapp源代碼)

|- baseappmgr (baseappmgr源代碼)

|- cellapp (cellapp源代碼)

|- cellappmgr (cellappmgr源代碼)

|- dbmgr (dbmgr源代碼)

|- loginapp (loginapp源代碼)

|- machine (machine源代碼)

|- resourcemgr (resourcemgr源代碼)

|- tools (服務(wù)端助手工具)

|- interfaces (支持第三方計(jì)費(fèi)、第三方賬號(hào)等接口)

|- bots (壓力測(cè)試, 虛擬客戶端, 源碼)

|- guiconsole (可視化的控制臺(tái)工具源碼)

|- message_log (服務(wù)端log收集工具源碼)

|- res (引擎資源目錄)

|- key (RSA密鑰)

|- scripts (Python腳本庫(kù))

|- server (服務(wù)端引擎配置)

|- log4cxx_properties (log4cxx配置)

|- doc (指南文檔源代碼)

|- bin (編譯后的可執(zhí)行文件存放目錄)

|- client (編譯后的客戶端exe可執(zhí)行文件存放目錄)

|- server (編譯后的服務(wù)端可執(zhí)行文件存放目錄)

|- logs (服務(wù)端運(yùn)行日志)

|- tutoria

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《UNIX 網(wǎng)絡(luò)編程卷一:套接字聯(lián)網(wǎng)API》筆記 套接字 套接字編程接口,是在 TCP/IP 協(xié)議族中,應(yīng)用層進(jìn)入...
    超net閱讀 5,987評(píng)論 2 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,811評(píng)論 18 399
  • 利用delegate實(shí)現(xiàn)兩個(gè)Controller之間的傳值 RootViewController中用個(gè)lable和...
    亡魚閱讀 1,626評(píng)論 0 1
  • 寫一個(gè)函數(shù),批量操作 css 如何獲取 DOM 計(jì)算后的樣式 使用getComputedStyle方法獲取 實(shí)現(xiàn)效...
    NinthG閱讀 664評(píng)論 0 49
  • 現(xiàn)在提示框UIalert和UIActionSheet不給用了,蘋果把兩個(gè)合并為了UIalertController...
    lxf_2013閱讀 3,715評(píng)論 0 2

友情鏈接更多精彩內(nèi)容