大家好,我是FoldCc,今天給大家分享一下自己設(shè)計(jì)并且經(jīng)常用到的一個(gè)網(wǎng)絡(luò)通信框架---客戶端 經(jīng)過(guò)自己的實(shí)踐,發(fā)現(xiàn)這套框架在應(yīng)對(duì)一些中小型手游還是比較穩(wěn)定使用的,整體結(jié)構(gòu)也比較簡(jiǎn)單,但是特別實(shí)用,唯一要注意一點(diǎn)的是在開(kāi)發(fā)網(wǎng)絡(luò)通信時(shí),一定要注意多線程爭(zhēng)用資源的問(wèn)題。 下面我為大家詳細(xì)介紹一下: 首先最核心的是Socket連接器 它的功能主要有4個(gè) 》向服務(wù)器發(fā)起連接請(qǐng)求 》一個(gè)能夠返回已經(jīng)連接服務(wù)器的Socket的方法(僅用于之后開(kāi)啟接收和發(fā)送消息線程) 》判斷當(dāng)前是否連接正常 》斷開(kāi)服務(wù)器連接 當(dāng)連接器連接成功后會(huì)自動(dòng)創(chuàng)建兩個(gè)線程,分別用來(lái)接收和發(fā)送,(至于為什么要單獨(dú)分開(kāi)成兩個(gè),是因?yàn)樵趯?shí)際應(yīng)用中一個(gè)線程處理這兩個(gè)效率上低,容易出問(wèn)題,并且理論上來(lái)說(shuō)一個(gè)線程同時(shí)處理發(fā)送和接收也有點(diǎn)不合理)為了防止接收和發(fā)送線程在處理消息可能出現(xiàn)效率跟不上的問(wèn)題,我設(shè)置了兩個(gè)消息隊(duì)列,分別用來(lái)裝發(fā)送的消息和接收的消息,其中接收的消息通過(guò)消息分類(lèi)器分類(lèi)到不同隊(duì)列中,這里需要注意的一點(diǎn)是,接收消息需要做粘包處理!說(shuō)通俗一點(diǎn)就是判斷消息的完整性,這里我為所有消息都加了一個(gè)特定的消息頭 和消息尾 用來(lái)判斷消息的完整性,至于消息頭和消息尾的內(nèi)容由自己設(shè)計(jì),最好是不常使用的一些特殊字符,防止遇到和內(nèi)容相同的情況。 兩個(gè)線程則只負(fù)責(zé)將收到的消息往隊(duì)列中存儲(chǔ)以及將發(fā)送隊(duì)列的消息按順序發(fā)送就行了,消息分類(lèi)會(huì)單獨(dú)去對(duì)消息進(jìn)行分類(lèi)并存放到對(duì)應(yīng)隊(duì)列中。 下面是這一套框架的流程圖,如果有用大家?guī)兔D(zhuǎn)載哦! |
|
來(lái)自: kiki的號(hào) > 《網(wǎng)絡(luò)編程》