最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity_如何設(shè)計(jì)網(wǎng)絡(luò)框架1

2022-09-09 14:33 作者:游戲開發(fā)RAIN  | 我要投稿

在Unity框架設(shè)計(jì)中與游戲服務(wù)器對(duì)接的網(wǎng)絡(luò)框架也是非常重要的一個(gè)模塊,本文給大家分享如何來(lái)基于Unity來(lái)設(shè)計(jì)一個(gè)網(wǎng)絡(luò)框架, 主要的講解以下幾個(gè)點(diǎn):


TCP半包粘包, 長(zhǎng)連接與短連接, IO阻塞

TCP 是可靠的網(wǎng)絡(luò)傳送協(xié)議,網(wǎng)絡(luò)傳輸?shù)讓用堪l(fā)送一個(gè)TCP數(shù)據(jù)包,就要等對(duì)方確認(rèn),收到確認(rèn)消息以后才能發(fā)下一個(gè)TCP數(shù)據(jù)包。當(dāng)我們?cè)趹?yīng)用層發(fā)送一個(gè)應(yīng)用層的數(shù)據(jù)包的時(shí)候,TCP網(wǎng)絡(luò)底層可能會(huì)把這個(gè)應(yīng)用層的數(shù)據(jù)包分成若干”TCP數(shù)據(jù)包”,通過網(wǎng)絡(luò)底層發(fā)出去。那么這里就會(huì)有一個(gè)問題,應(yīng)用層發(fā)的數(shù)據(jù)包有可能被拆散成幾個(gè)”TCP數(shù)據(jù)包”發(fā)出去,我們?cè)诹硗庖欢私邮盏臅r(shí)候,可能要把這些拆散的包組合起來(lái)。這個(gè)就是”半包”。底層有可能把兩個(gè)應(yīng)用層的數(shù)據(jù)包分到一個(gè)”TCP數(shù)據(jù)包”發(fā)過去,接收到后,一部分是屬于上一個(gè)應(yīng)用層的數(shù)據(jù)包,一部分屬于下一個(gè)應(yīng)用層的數(shù)據(jù)包,這個(gè)叫做”粘包”。

TCP 是面向連接的,服務(wù)端與客戶端通過TCP 連接來(lái)傳送數(shù)據(jù),如果連接一直在,發(fā)送完數(shù)據(jù)后,不關(guān)閉連接,下一次發(fā)數(shù)據(jù)可以直接發(fā)送,我們叫做長(zhǎng)連接。如果發(fā)送數(shù)據(jù)先建立連接,數(shù)據(jù)發(fā)送完畢后,馬上關(guān)閉連接,下次要發(fā)送數(shù)據(jù)重新建立連接,這種叫做”短連接”。長(zhǎng)連接一直存在,優(yōu)點(diǎn)就是客戶端與服務(wù)端隨時(shí)可以相互通訊,但是一直占用連接資源。短連接是不占用連接資源,但是只有客戶端能像服務(wù)端發(fā)送數(shù)據(jù),服務(wù)端在斷開連接后無(wú)法主動(dòng)通知客戶端。

IO阻塞指的是我們的CPU處理數(shù)據(jù)的速度,遠(yuǎn)遠(yuǎn)大于網(wǎng)絡(luò)的傳送速度。當(dāng)我們要發(fā)送數(shù)據(jù)的時(shí)候,CPU調(diào)用IO的接口,把數(shù)據(jù)從內(nèi)存拷貝到網(wǎng)絡(luò)底層,等待底層把數(shù)據(jù)傳送過去后,CPU調(diào)用的IO函數(shù)返回,而這個(gè)過程,CPU在等待網(wǎng)絡(luò)把數(shù)據(jù)發(fā)出去,線程掛起了,這個(gè)我們叫做IO阻塞。


Tcp Socket與UDP Socket 的技術(shù)方案

了解完網(wǎng)絡(luò)的一些基本概念以后,接下來(lái)看下使用TCP/UDP Socket用哪些技術(shù)方案。Unity其實(shí)是作為網(wǎng)絡(luò)的客戶端,而客戶端只要去連接服務(wù)端與服務(wù)器通訊就可以了,不用像服戶端同時(shí)處理N個(gè)客戶端的數(shù)據(jù)傳送。所以客戶端Socket非常的簡(jiǎn)單。Unity客戶端的Socket我們用哪個(gè)插件呢?其實(shí)這種完全不需要用什么插件,直接使用OS為我們提供的Socket的相關(guān)API就可以了。

TCP Socket 面向連接的,使用流程如下:

1: 客戶端Connect服務(wù)端,建立Socket連接;

2: 調(diào)用Socket的Send函數(shù)發(fā)送數(shù)據(jù);

3: 調(diào)用Sokcet Recv函數(shù)從Socket上讀取數(shù)據(jù);

4: 關(guān)閉Socket 的連接;

UDP Socket的使用, UDP Socket不是面向連接的,只是調(diào)用底層的網(wǎng)絡(luò)協(xié)議,直接把數(shù)據(jù)包發(fā)往特定地址+端口。所以直接是SendTo(網(wǎng)絡(luò)地址+端口), RecvFrom(網(wǎng)絡(luò)地址+端口)

TCP/UDP Socket已經(jīng)足夠簡(jiǎn)單,Unity開發(fā)者在選取技術(shù)的時(shí)候直接使用即可。

Unity的序列化與反序列化技術(shù)方案

網(wǎng)絡(luò)發(fā)送的都是數(shù)據(jù)字節(jié)流,Unity與服務(wù)端通訊要把要發(fā)送的數(shù)據(jù)對(duì)象變成二進(jìn)制字節(jié)流,然后通過網(wǎng)絡(luò)傳送出去,收到字節(jié)流以后,又要重建回?cái)?shù)據(jù)對(duì)象,完成數(shù)據(jù)發(fā)送。數(shù)據(jù)對(duì)象變成二進(jìn)制字節(jié)流這個(gè)過程叫序列化,把二進(jìn)制字節(jié)流轉(zhuǎn)回?cái)?shù)據(jù)對(duì)象叫反序列化。

序列化/反序列化目前主要有兩個(gè)打的方向:一個(gè)是二進(jìn)制序列化,一個(gè)是文本序列化;

二進(jìn)制序列化/反序列化:基于二進(jìn)制的bit,通過用戶商量的協(xié)議來(lái)把數(shù)據(jù)對(duì)象變成二進(jìn)制bit數(shù)據(jù)流,反序列化的時(shí)候根據(jù)用戶協(xié)議,來(lái)把bit數(shù)據(jù)流變成數(shù)據(jù)對(duì)象。

文本序列化: 將數(shù)據(jù)變成人眼可讀的文本數(shù)據(jù)。當(dāng)收到序列化好的文本數(shù)據(jù)的時(shí)候,根據(jù)文本數(shù)據(jù)的規(guī)則來(lái)解析出里面的數(shù)據(jù)重建數(shù)據(jù)對(duì)象。

二進(jìn)制序列化/反序列化解決方案: protobuf;

還有三小節(jié)發(fā)布在下一篇


Unity_如何設(shè)計(jì)網(wǎng)絡(luò)框架1的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
秭归县| 博白县| 清远市| 安宁市| 仙桃市| SHOW| 乐安县| 阜城县| 南充市| 古浪县| 乾安县| 云林县| 元氏县| 嘉善县| 武乡县| 伊川县| 分宜县| 盐边县| 福清市| 沙河市| 牟定县| 喀喇沁旗| 岳普湖县| 固原市| 高雄县| 迁西县| 交城县| 庆元县| 凤城市| 独山县| 灵璧县| 应城市| 张北县| 乌拉特后旗| 花莲市| 当涂县| 鹤峰县| 临猗县| 鱼台县| 寿阳县| 来安县|