亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Select多路復用的游戲服務(wù)端框架研究與實現(xiàn)

        2020-09-24 08:31:50章國雁
        黃山學院學報 2020年4期
        關(guān)鍵詞:服務(wù)端客戶端框架

        章國雁

        (安徽工商職業(yè)學院 信息工程學院,安徽 合肥230001)

        一、引 言

        網(wǎng)絡(luò)游戲(Online Game)是指由軟件程序和信息數(shù)據(jù)構(gòu)成,通常以客戶端、網(wǎng)頁瀏覽器和包括移動電話、聯(lián)網(wǎng)游戲機等各類信息設(shè)備的其他移動終端為載體,以游戲運營商服務(wù)器為處理器,以互聯(lián)網(wǎng)為數(shù)據(jù)傳輸媒介的游戲產(chǎn)品及服務(wù)[1]。網(wǎng)絡(luò)游戲依據(jù)載體的不同,包括基于普通PC 機的端游、基于瀏覽器運行的頁游、基于XBOX、PS4等的主機游戲、基于手機/iPad等移動設(shè)備的手游。其中,端游由于運行在PC 機平臺上,該種類游戲一般制作較為精良,畫面效果較好,受眾玩家對游戲的要求也更高一些;頁游主要運行在瀏覽器上,直接打開即可運行游戲,該種類游戲往往畫面效果較為一般,但由于不用下載游戲文件,打開網(wǎng)頁可直接開始玩,較為便捷,受眾群體多為對游戲畫面和玩法要求不高的玩家;主機游戲的畫面效果最好,制作最為精良,但要求有配套的主機設(shè)備,游戲操作對玩家的專業(yè)性要求也更高;手游受益于近些年手機和iPad等移動端用戶的大量增加,該種類游戲玩法和畫面效果好于頁游,較好地利用了用戶的空余間隔,玩法較為簡便,是目前為止發(fā)展較好的類別。

        二、服務(wù)端關(guān)鍵技術(shù)

        1.網(wǎng)絡(luò)協(xié)議

        網(wǎng)絡(luò)協(xié)議是保障網(wǎng)絡(luò)游戲基本通信的前提,合理地選擇網(wǎng)絡(luò)協(xié)議將使游戲更加高效、穩(wěn)定和安全[2]。傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP)是網(wǎng)絡(luò)游戲研發(fā)中常用的兩個協(xié)議。

        傳輸控制協(xié)議作為一種面向有連接的協(xié)議,位于傳輸層,服務(wù)可靠性非常高,為了便于傳輸,將大塊的數(shù)據(jù)包以報文段為單位進行分割,方便數(shù)據(jù)管理。傳輸控制協(xié)議之所以擁有可靠性,是該協(xié)議能夠把數(shù)據(jù)無誤地傳到對方,針對丟包可以進行重發(fā),對次序錯誤的數(shù)據(jù)包進行順序調(diào)整;還具有控制通信流量的功能,發(fā)送數(shù)據(jù)前先確認通信對方是否存在,不存在不會發(fā)送數(shù)據(jù)。通常傳輸控制協(xié)議連接會有三次“握手”建立,斷開連接要經(jīng)過四次。

        用戶數(shù)據(jù)報協(xié)議是無連接、不可靠的協(xié)議,發(fā)送數(shù)據(jù)前不確認通信對方是否存在,直接把數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)中,因此并不能確認該數(shù)據(jù)是否到達終端節(jié)點,也不能確認數(shù)據(jù)到達的順序是否正確。

        2.Socket(套接字)

        Socket(套接字)由端口號拼接IP 地址構(gòu)成,它是傳輸層實現(xiàn)端到端通信的一個端點,每一次連接都有兩個端點,套接字表示形式為主機IP 地址:主機16位端口號。假設(shè)一個IP地址為202.57.134.29,端口號為85 的主機,那么其套接字形式為(202.57.134.29:85)。

        3.I/O模型

        Select 模式是 Winsock 中最常見的 I/O 模型[3]。它主要是使用select 函數(shù)來實現(xiàn)對I/O的管理,并判斷套接字上是否能寫入或者存在數(shù)據(jù)[4]。當系統(tǒng)內(nèi)核檢測到進程的1個或者多個I/O條件準備完畢時,Select 多路復用模式會通知該進程。該模型的優(yōu)點在于減少了系統(tǒng)開銷,系統(tǒng)不必頻繁創(chuàng)建和維護大量的進程或者線程。

        4.分布式數(shù)據(jù)庫

        現(xiàn)在網(wǎng)絡(luò)游戲功能復雜,玩家需要存儲大量的數(shù)據(jù),除了基本的用戶賬號、密碼等信息外,還有游戲角色相關(guān)的大量數(shù)據(jù)需要在數(shù)據(jù)庫中長期保存。由于網(wǎng)絡(luò)游戲?qū)Ξ嬅鎮(zhèn)鬏數(shù)耐叫砸筝^高,如果數(shù)據(jù)庫采用同步的模式,網(wǎng)絡(luò)延遲較大。可以使用分布式數(shù)據(jù)庫,采用異步的方式對數(shù)據(jù)庫進行操作。

        三、通用服務(wù)端框架設(shè)計

        游戲服務(wù)端主要任務(wù)是接收和處理游戲客戶端發(fā)送過來的大量信息,以及存儲和讀取玩家賬號角色相關(guān)的數(shù)據(jù),依據(jù)這一任務(wù)內(nèi)涵,一款通用的小型網(wǎng)絡(luò)游戲服務(wù)端框架可以按圖1 方式實現(xiàn),采用Select 多路復用服務(wù)端架構(gòu),“網(wǎng)絡(luò)底層”模塊位于架構(gòu)的底層,主要功能為處理數(shù)據(jù)粘包半包、協(xié)議解析等,主要代碼封裝在NetManager 類中進行實現(xiàn);“消息處理”模塊屬于架構(gòu)的邏輯層,如客戶端向服務(wù)端發(fā)送“移動”協(xié)議時,服務(wù)端在該模塊中記錄玩家的位置信息,然后把“移動”協(xié)議廣播給所有在線的客戶端,其他客戶端收到信息后根據(jù)最新的數(shù)據(jù)更新其對應(yīng)玩家的位置;“事件處理”模塊主要處理玩家的上線和下線操作,玩家新上線時,首先需要讀取數(shù)據(jù)庫中保存的數(shù)據(jù),然后初始化角色信息,當玩家下線時,需要保存玩家的最新數(shù)據(jù)到數(shù)據(jù)庫中等?!皵?shù)據(jù)庫底層”模塊包含游戲數(shù)據(jù)的新增、讀取、修改、刪除等功能,例如賬戶登錄時密碼的校驗、新玩家注冊時賬戶名的重復性檢測、玩家數(shù)據(jù)(如等級)的讀取等,是服務(wù)端和數(shù)據(jù)庫本身數(shù)據(jù)通信的中介。“存儲處理”模塊主要是區(qū)分數(shù)據(jù)的存儲形式,游戲中有些數(shù)據(jù),如玩家等級、金幣、裝備、經(jīng)驗值等需要長期保存,有些則可以臨時保存。

        該框架在網(wǎng)絡(luò)帶寬較好地情況下,可承載1 萬名左右玩家同時在線游戲,可保持較好的游戲體驗。該服務(wù)端框架采用TCP 協(xié)議進行通信,使用Json 進行通信編碼,使用MySQL 數(shù)據(jù)庫保存玩家數(shù)據(jù)。

        圖1 服務(wù)端框架

        四、通用服務(wù)端框架實現(xiàn)

        服務(wù)端程序具有粘包半包處理、協(xié)議解析、心跳機制、數(shù)據(jù)庫存儲等功能。

        1.網(wǎng)絡(luò)管理器NetManager功能

        服務(wù)端框架中“網(wǎng)絡(luò)底層”模塊的核心部分主要實現(xiàn)創(chuàng)建監(jiān)聽套接字listenSocket、管理客戶端狀態(tài)列表checkReadList、綁定、開啟端口監(jiān)聽(服務(wù)器啟動成功)、Select 多路復用檢測可讀對象、新客戶端連接處理ReadListenSocket、客戶端消息處理ReadCliendfd、定時器等功能,服務(wù)端進入StartServerLoop循環(huán)狀態(tài),其核心代碼如下:

        2.協(xié)議解析

        采用Json 編碼解碼,其格式簡介、層次結(jié)構(gòu)清晰,不但便于人去閱讀和編寫,也便于機器去解析和生成,采用Json 編碼的方式可以提升網(wǎng)絡(luò)數(shù)據(jù)的傳輸效率。

        .net 內(nèi)置了編碼解碼Json 的方法“JavaScriptJ-sonSerializer”,需要手動引用System.web.Extensions命名空間。Json編碼解碼的代碼如下:

        3.心跳機制

        如果客戶端掉線或者信號不好導致網(wǎng)絡(luò)斷開,服務(wù)端應(yīng)該能及時發(fā)現(xiàn)并釋放資源,對單個客戶端來說,資源的釋放作用不是很明顯,因為單個客戶端只有一個Socket 占用資源,而對服務(wù)端來說卻是連接著幾萬甚至幾十萬的資源,如果不能主動釋放斷開的資源,將造成服務(wù)端資源被大量占用。

        心跳機制用于避免出現(xiàn)類似的情況,TCP 協(xié)議本身具有心跳機制,但需要等待2 小時才會釋放資源,這對網(wǎng)絡(luò)游戲來說,顯然是不適用的,因此目前業(yè)內(nèi)主要是自行實現(xiàn)心跳機制,客戶端在固定時間間隔給服務(wù)端發(fā)送PING 協(xié)議,服務(wù)端在固定時間間隔收到后響應(yīng)發(fā)送PONG 協(xié)議;假設(shè)服務(wù)端在設(shè)定時間間隔內(nèi)因為網(wǎng)絡(luò)不順暢或者客戶端掉線沒有收到PING 協(xié)議,則可以判斷客戶端已經(jīng)掉線,釋放回收該資源用于其他客戶端;同樣,假設(shè)客戶端較長時間內(nèi)沒有收到PONG 協(xié)議,則認為網(wǎng)絡(luò)斷開或者服務(wù)端已經(jīng)宕機,客戶端可以釋放自身的資源。

        4.數(shù)據(jù)庫存儲

        網(wǎng)絡(luò)游戲中的數(shù)據(jù)量十分龐大,玩家數(shù)據(jù)有些必須在數(shù)據(jù)庫中進行長期存儲,有些只需要臨時存儲即可,例如用戶賬號和密碼、玩家的金幣、等級、裝備種類、任務(wù)等,這些信息時刻受到玩家關(guān)注,需要長期存儲,方便玩家上線后進行數(shù)據(jù)調(diào)用;但有些數(shù)據(jù),例如玩家的當前位置信息只需臨時存儲,玩家重新上線后會被重置。在Player對象中設(shè)定一個PlayerData 類型的對象,用來保存所有需要存儲到數(shù)據(jù)庫的信息,以昵稱、金幣、等級三個屬性為例。代碼如下:

        游戲開發(fā)中使用最多的是MySQL數(shù)據(jù)庫,當服務(wù)端與數(shù)據(jù)庫需要進行數(shù)據(jù)交互時,通過發(fā)送SQL語句進行數(shù)據(jù)的操作,包括新增、修改、讀取、刪除等操作。配置MySQL數(shù)據(jù)庫分為兩個步驟,一是安裝MySQL 服務(wù)器,開始監(jiān)聽端口;二是使用第三方庫來編碼和解碼MySQL 特定形式的協(xié)議。采用Navicat 軟件來進行數(shù)據(jù)庫管理,新建數(shù)據(jù)庫名為“game”,新建“account”表和“player”表,如圖2所示。

        圖2 MySQL數(shù)據(jù)庫表

        五、服務(wù)端運行及測試

        服務(wù)端框架搭建成功后,如圖3 所示,連接成功,服務(wù)端啟動,開始對服務(wù)端進行監(jiān)聽,客戶端使用Unity3D游戲引擎進行功能測試,客戶端連接、賬號注冊、登錄、心跳機制、客戶端斷開等功能正常運行。

        六、結(jié)束語

        圖3 服務(wù)端測試

        基于Select多路復用的通用服務(wù)端框架是一套功能較為完備的C#通用服務(wù)端程序,可用于小規(guī)模同時在線,為網(wǎng)絡(luò)游戲服務(wù)端開發(fā)商業(yè)應(yīng)用提供了一定的技術(shù)參考。

        猜你喜歡
        服務(wù)端客戶端框架
        框架
        廣義框架的不相交性
        云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
        縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
        傳媒評論(2018年4期)2018-06-27 08:20:24
        孵化垂直頻道:新聞客戶端新策略
        傳媒評論(2018年4期)2018-06-27 08:20:16
        基于Vanconnect的智能家居瘦客戶端的設(shè)計與實現(xiàn)
        電子測試(2018年10期)2018-06-26 05:53:34
        新時期《移動Web服務(wù)端開發(fā)》課程教學改革的研究
        消費導刊(2018年8期)2018-05-25 13:19:48
        在Windows Server 2008上創(chuàng)建應(yīng)用
        WTO框架下
        法大研究生(2017年1期)2017-04-10 08:55:06
        一種基于OpenStack的云應(yīng)用開發(fā)框架
        亚洲精品女同在线观看| 亚洲a∨无码一区二区| 狠狠躁夜夜躁AV网站中文字幕| 天堂av在线一区二区| 国产一区二区黄色网页| 波多野结衣爽到高潮大喷| 美女大量吞精在线观看456 | 婷婷激情六月| 风流少妇一区二区三区91| 综合亚洲伊人午夜网| 少妇人妻偷人精品免费视频| 国产小屁孩cao大人| 国产精品亚洲最新地址| 97成人精品国语自产拍| 中国农村熟妇性视频| 女女同性黄网在线观看| 亚洲国产精品av麻豆一区| 老太婆性杂交视频| 亚洲色欲久久久久综合网| 国产成人精品日本亚洲直播| 久久婷婷综合色一区二区| av免费不卡国产观看| 狠狠躁夜夜躁无码中文字幕| 亚洲一区二区三区在线观看蜜桃| 邻居人妻的肉欲满足中文字幕 | 最近日本中文字幕免费完整| A亚洲VA欧美VA国产综合| 国产av剧情久久精品久久| 乱中年女人伦av一区二区| 亚洲人在线观看| 国产一级一厂片内射视频播放| 国产香蕉视频在线播放| 精品国产一区二区三区av 性色| 亚洲无线码一区在线观看| 国产传媒精品成人自拍| 国模丽丽啪啪一区二区| 欧美日韩国产亚洲一区二区三区| 白色白在线观看免费2| 无码人妻一区二区三区兔费| 久久亚洲黄色| 白色白色在线视频播放平台|