摘要:通信服務(wù)器是通信領(lǐng)域的核心,也是保證用戶正常應(yīng)用網(wǎng)絡(luò)的基礎(chǔ),為增強(qiáng)通信服務(wù)器的穩(wěn)定性、提高軟件的開發(fā)效率,可以將ACE中間件作為開發(fā)工具,采取面向?qū)ο蟮木幊谭椒?,設(shè)計(jì)、應(yīng)用分布式通信服務(wù)器,重點(diǎn)解決分布式通信服務(wù)器設(shè)計(jì)過程中遇到的問題。同時(shí),將分布式通信服務(wù)器應(yīng)用于服務(wù)器程序開發(fā)系統(tǒng),搭建通信數(shù)據(jù)傳輸平臺(tái),以此形成完整的ACE框架下分布式通信服務(wù)器設(shè)計(jì)與應(yīng)用過程,以此降低系統(tǒng)軟件開發(fā)成本,提升軟件系統(tǒng)應(yīng)用效率。
關(guān)鍵詞:ACE框架;分布式通信服務(wù)器;通信服務(wù)器
一、前言
分布式通信服務(wù)器將任務(wù)分散到多個(gè)計(jì)算機(jī)上進(jìn)行協(xié)同處理,并通過網(wǎng)絡(luò)連接在一起實(shí)現(xiàn)資源共享和負(fù)載均衡。分布式通信服務(wù)器具有可靠性、高效性等特點(diǎn),通過發(fā)揮更好的擴(kuò)展性作用,靈活調(diào)整集群大小,獨(dú)立運(yùn)行任務(wù),以此加快任務(wù)處理速度。在ACE框架下,實(shí)現(xiàn)分布式通信服務(wù)器,多方面接受和響應(yīng)客戶端的各種請(qǐng)求,為用戶提供特定的服務(wù)和分享數(shù)據(jù),形成龐大的信息、資源傳遞系統(tǒng),在交互性、復(fù)用性、移植性方面滿足不斷提高的性能需求,由此發(fā)揮軟件結(jié)構(gòu)的重要作用。
二、ACE框架簡(jiǎn)介
ACE框架的作用是降低“連接建立和服務(wù)及初始化”與“連接建立成功并完成初始化的后續(xù)處理”之間的耦合程度,包括接收器、連接器,見表1。接收器創(chuàng)建、初始化傳輸端點(diǎn),被動(dòng)監(jiān)聽遠(yuǎn)端連接者的特定地址,連接器主動(dòng)向遠(yuǎn)端接收器發(fā)出連接信號(hào)。通過接收器和連接器,系統(tǒng)自動(dòng)執(zhí)行對(duì)應(yīng)的操作語句,建立連接和初始化對(duì)端服務(wù)。ACE_Connector模式框架的類間關(guān)系如圖1所示,ACE接收器接收到信息后,傳遞給某個(gè)已連接至本地端的連接對(duì)應(yīng)的服務(wù)、ACE連接器,按照操作要求運(yùn)行客戶端或服務(wù)器,實(shí)現(xiàn)用戶服務(wù),并分離初始化服務(wù)和后續(xù)服務(wù),以此優(yōu)化服務(wù)的擴(kuò)展性。
三、基于ACE框架分布式通信服務(wù)器設(shè)計(jì)
(一)服務(wù)器開發(fā)模型的設(shè)計(jì)
基于ACE框架,設(shè)計(jì)循環(huán)服務(wù)器模型,該模型功能的實(shí)現(xiàn)得益于UPD協(xié)議和Recvfrom()函數(shù)。首先,當(dāng)服務(wù)器檢測(cè)用戶的系統(tǒng)請(qǐng)求后,應(yīng)用Bind()函數(shù)、While(true)程序檢驗(yàn)系統(tǒng)請(qǐng)求內(nèi)容是否為空。其次,若不為空,應(yīng)用Recvfrom()函數(shù)讀取系統(tǒng)請(qǐng)求內(nèi)容。再次,應(yīng)用Process()函數(shù)處理系統(tǒng)請(qǐng)求內(nèi)容。最后,將Sendto()函數(shù)將反饋的系統(tǒng)請(qǐng)求內(nèi)容反饋到客戶端,并返回While(true)程序,等待驗(yàn)證下一個(gè)用戶的請(qǐng)求。通過該循環(huán)過程,有利于循環(huán)監(jiān)聽用戶的實(shí)際需求、檢測(cè)用戶的具體需求,及時(shí)處理用戶的請(qǐng)求,并及時(shí)反饋用戶請(qǐng)求對(duì)應(yīng)的內(nèi)容,由此提升通信效率,進(jìn)一步凸顯服務(wù)器開發(fā)模式的重要作用,符合服務(wù)器開發(fā)模型的設(shè)計(jì)需求。
除UPD協(xié)議之外,還可以應(yīng)用TCP協(xié)議實(shí)現(xiàn)循環(huán)式服務(wù)器,首先,服務(wù)器檢測(cè)用戶的系統(tǒng)請(qǐng)求后,應(yīng)用Bind()函數(shù)、While(true)程序檢驗(yàn)系統(tǒng)請(qǐng)求內(nèi)容是否為空,并按照TCP協(xié)議要求幫助通信雙方建立通信連接,若不為空,應(yīng)用Accept ()函數(shù)接收通信信息。其次,應(yīng)用Read()函數(shù)和Process()函數(shù)處理通信雙方建立通信連接請(qǐng)求內(nèi)容,使用Write ()函數(shù)記錄通信過程。最后,不斷接收通信雙方建立通信連接請(qǐng)求,不斷返回While(true)程序,直至通信結(jié)束,開啟Close()函數(shù)功能,結(jié)束通信循環(huán)。
(二)通信服務(wù)器I/O的設(shè)計(jì)
通信服務(wù)器I/O的設(shè)計(jì)涉及I/O完成端口、通信服務(wù)器處理線程、利用前攝器實(shí)現(xiàn)I/O完成處理三個(gè)板塊。
在I/O完成端口設(shè)計(jì)過程,應(yīng)用CreateIoCompletionPort ()函數(shù)創(chuàng)建I/O完成端口,并采用先進(jìn)先出的方式排列端口,實(shí)現(xiàn)I/O完成端口的關(guān)聯(lián),當(dāng)完成I/O完成端口設(shè)計(jì)隊(duì)列時(shí),檢查多個(gè)與端口關(guān)聯(lián)的線程,若運(yùn)行線程數(shù)量低于系統(tǒng)并發(fā)值,調(diào)用處于等待狀態(tài)的線程處理完成包,若隊(duì)列屬于空狀態(tài),繼續(xù)等待下一個(gè)線程處理完成包。當(dāng)沒有更多引用時(shí),完成端口被釋放,關(guān)閉所有句柄,釋放I/O端口和相關(guān)系統(tǒng)資源,調(diào)用CloseHandle函數(shù)關(guān)閉I/O完成端口句柄。通過完成I/O完成端口設(shè)計(jì),更新狀態(tài),進(jìn)入端口隊(duì)列。
關(guān)于通信服務(wù)器處理線程,處理單線程、多線程和每CPU一線程。單線程主要指服務(wù)器接收用戶的請(qǐng)求內(nèi)容后,按照時(shí)間順序進(jìn)入端口隊(duì)列,等待CPU處理,CPU處理后,逐一接收用戶的請(qǐng)求內(nèi)容,處理時(shí)間較長、速度較慢,無法及時(shí)處理用戶的需求。多線程主要指為每一位用戶開辟一個(gè)線程,分解CPU的資源,各個(gè)線程統(tǒng)一操作,共同完成線程服務(wù)任務(wù),給予用戶及時(shí)答復(fù),切合實(shí)際情況。每CPU一線程主要指為每一個(gè)CPU分配一個(gè)線程,既不需要切換線程,解決處理單線程存在的問題,也不浪費(fèi)CPU資源,解決多線程存在的問題,從而發(fā)揮通信服務(wù)器處理線程的重要作用。
利用前攝器實(shí)現(xiàn)I/O完成處理,創(chuàng)建完成端口,創(chuàng)建前攝器ACE_Proactor,啟動(dòng)前攝器事件循環(huán),等待I/O完成事件,啟動(dòng)服務(wù)器監(jiān)聽,創(chuàng)建完成處理器,處理I/O信息和關(guān)閉積套接字,退出事件循環(huán),形成完整的前攝器I/O完成處理過程。
(三)消息可靠運(yùn)輸?shù)脑O(shè)計(jì)
ACE提供統(tǒng)一的ACE_Asynch_Operation接口類,將系統(tǒng)處理信息的方法轉(zhuǎn)發(fā)到其他類,操作讀取各個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)結(jié)果,更新寫指針,指示增加的字節(jié)數(shù),并通過參數(shù)及priority指定,記錄信號(hào)量個(gè)數(shù)signal_number。對(duì)于監(jiān)控終端處理信息的過程,監(jiān)控終端發(fā)起登錄請(qǐng)求后,創(chuàng)建完成處理器,調(diào)用Open()函數(shù),Read()函數(shù)異步讀取操作信息,通過注冊(cè),Read()函數(shù)異步讀取操作信息,ACE_Service_Handler調(diào)用handle_read_stream()函數(shù),若成功,將信息放入消息隊(duì)列,若不成功,刪除完成處理器[1]。
接收信息后,讀取通信鏈上傳遞的信息,指明積消息的長度,解析消息長度,以發(fā)送并被確認(rèn)信息后,滑動(dòng)指針1以發(fā)送未被確認(rèn),滑動(dòng)指針2可繼續(xù)發(fā)送,滑動(dòng)指針3真正收到確認(rèn)后向前滑動(dòng)。通過控制發(fā)送端的流量,掌握每次接收的數(shù)據(jù)包,讀取消息頭和消息體,分解緩沖區(qū)數(shù)據(jù),若消息頭接收完畢,解析消息長度,到緩沖區(qū)中提取消息體,了解緩沖區(qū)數(shù)據(jù),若消息體接收完畢,處理信息,接收完畢。
系統(tǒng)接收信息后,根據(jù)接收的消息存儲(chǔ)或轉(zhuǎn)發(fā)至其他終端,對(duì)于不同消息的請(qǐng)求,從鍵值和映射兩個(gè)層面實(shí)現(xiàn)用戶分類,尋找客戶端和處理器。從鍵值和映射兩個(gè)層面處理信息后,操作同一個(gè)消息對(duì)象,提高信息轉(zhuǎn)發(fā)率,控制數(shù)據(jù)接收延遲,為后續(xù)數(shù)據(jù)轉(zhuǎn)發(fā)提供便利條件。同時(shí),發(fā)送信息之前,判斷網(wǎng)絡(luò)連接是否良好,若信息無法正常發(fā)送,立即停止信息傳遞,轉(zhuǎn)變線路,實(shí)現(xiàn)底層的信息傳遞和發(fā)送,防止出現(xiàn)數(shù)據(jù)丟失問題。信息發(fā)送完畢后,釋放內(nèi)存,調(diào)用release()函數(shù),順利完成內(nèi)存釋放[2]。
(四)數(shù)據(jù)庫的設(shè)計(jì)
對(duì)于類Web開發(fā)范式組件,根據(jù)組件從前端到后端的過程,可以將整個(gè)框架劃分為JsFrameWork、DomNode、ComPonent、RenderNode四個(gè)模塊。
JsFrameWork框架模塊,負(fù)責(zé)解析前端html和css文件,創(chuàng)建出DomNode樹。該樹的結(jié)構(gòu)和前端頁面是一一對(duì)應(yīng)的。
DomNode框架模塊,負(fù)責(zé)將Dom樹轉(zhuǎn)換為Component樹。注意一個(gè)Dom節(jié)點(diǎn)轉(zhuǎn)換過后的Component節(jié)點(diǎn)實(shí)際上并不是一個(gè)單獨(dú)的節(jié)點(diǎn),而是一棵以rootComponent為根節(jié)點(diǎn)的組件樹。該樹中逐層包裹了對(duì)應(yīng)的功能組件,最內(nèi)部才是真正的主節(jié)點(diǎn)(這樣的作用是功能解耦合,將某一特定的功能放到對(duì)應(yīng)的組件中去)。BoxComponet負(fù)責(zé)組件的邊框繪制,DisplayComponent負(fù)責(zé)組件透明度繪制,TouchComponent負(fù)責(zé)組件觸摸時(shí)間的處理等。
ComPonent框架模塊,負(fù)責(zé)將Component樹中所有繼承自RenderComponent的節(jié)點(diǎn)(可繪制節(jié)點(diǎn))創(chuàng)建對(duì)應(yīng)的RendNode節(jié)點(diǎn),生成對(duì)應(yīng)的RendNode樹。
RenderNode框架模塊,RenderNode即可繪制的節(jié)點(diǎn),負(fù)責(zé)組件的最終布局和繪制。布局函數(shù)為PerformLayout虛函數(shù),由每個(gè)組件對(duì)應(yīng)的實(shí)現(xiàn)類Render類來實(shí)現(xiàn)[3]。繪制函數(shù)為Paint虛函數(shù),由每個(gè)組件對(duì)應(yīng)的子類FlutterRender類實(shí)現(xiàn)。
(五)日志處理的設(shè)計(jì)
利用ACE_Reactor框架設(shè)計(jì)、實(shí)現(xiàn)分布式日記記錄服務(wù),保存日志運(yùn)行信息,及時(shí)了解用戶信息以及客戶端的運(yùn)行狀態(tài)。日志處理服務(wù)器應(yīng)用到Logging Acceptor、Logging Handler、ACE Acceptor、ACE Svc Handler、Event Handler、Peer Acceptor、Peer Stream、Reactor組件,由此保存系統(tǒng)運(yùn)行的信息,發(fā)揮日志處理設(shè)計(jì)板塊的重要作用,方便記錄系統(tǒng)的工作過程。同時(shí),涉及應(yīng)用程序記錄接口、客戶端記錄程序等關(guān)鍵組件,通過不斷接收、重新組織、輸出客戶端的日志數(shù)據(jù),增強(qiáng)系統(tǒng)的擴(kuò)展性。
(六)配置處理的設(shè)計(jì)
關(guān)于基于ACE框架分布式通信服務(wù)器的配置處理,實(shí)現(xiàn)靜態(tài)和動(dòng)態(tài)設(shè)計(jì)。靜態(tài)配置主要指服務(wù)器啟動(dòng)配置文件加載的過程,按照特定要求加載指定內(nèi)容。動(dòng)態(tài)配置主要指輸出可配置的必要參數(shù),如IP地址、線程池參數(shù)等,調(diào)用接口激活、掛起、恢復(fù)、終止一個(gè)服務(wù),由此獲取一個(gè)服務(wù)的動(dòng)態(tài)運(yùn)行信息,集中管理和控制可配置服務(wù)的行為[4]。
(七)通信服務(wù)器功能的設(shè)計(jì)
基于ACE框架分布式通信服務(wù)器的功能十分復(fù)雜,顯示的界面內(nèi)容十分重要,通過考查服務(wù)器的運(yùn)行狀況或調(diào)試內(nèi)容,了解配置處理、日志處理等功能,統(tǒng)籌通信服務(wù)器的作用和功能,了解通信數(shù)據(jù)庫服務(wù)的調(diào)度情況,掌握數(shù)據(jù)接收、轉(zhuǎn)發(fā)情況,分析存儲(chǔ)數(shù)據(jù)的消耗情況,及時(shí)處理信息、解析服務(wù)器,致力于得到最新、重新連接的數(shù)據(jù)[5]。同時(shí),設(shè)置清零、復(fù)位功能,有利于落實(shí)新的算法,快速得到服務(wù)器計(jì)算結(jié)果,從而提升基于ACE框架分布式通信服務(wù)器的便捷性。
四、基于ACE框架分布式通信服務(wù)器的應(yīng)用
計(jì)算機(jī)背景下,開發(fā)基于ACE框架分布式通信服務(wù)器,將其應(yīng)用于網(wǎng)絡(luò)游戲的設(shè)計(jì)過程,突破網(wǎng)絡(luò)游戲通信服務(wù)器的難點(diǎn),加強(qiáng)游戲溝通的流暢性,致力于給予用戶良好的感受,從而發(fā)揮基于ACE框架分布式通信服務(wù)器的重要作用。對(duì)于傳統(tǒng)的通信服務(wù)器,無法廣泛應(yīng)用軟件設(shè)計(jì)模式,開發(fā)代碼較長,容易出現(xiàn)信息交流卡頓問題,無法將流暢性落到實(shí)處。當(dāng)系統(tǒng)執(zhí)行任務(wù)時(shí),各個(gè)模塊團(tuán)結(jié)協(xié)作,形成流暢的運(yùn)作流程,而各個(gè)模塊之間的通信、關(guān)系十分復(fù)雜,不同模塊的配合情況更容易影響數(shù)據(jù)及通信效果,不利于提升通信效率。編程人員從底部開發(fā)系統(tǒng),但無形中增加了軟件開發(fā)的難度和周期。因此,將ACE框架分布式通信服務(wù)器應(yīng)用于網(wǎng)絡(luò)游戲中,降低軟件開發(fā)的難度,控制軟件開發(fā)的周期。
第一,支持Gate的游戲服務(wù)器架構(gòu)的實(shí)現(xiàn)。實(shí)現(xiàn)Client和Gate Server相連,用戶直接通過Gate Setver和游戲服務(wù)器Game Servet相連,采用“一對(duì)多”的方式,利用一個(gè)Game Server對(duì)應(yīng)多個(gè)Gate Server,當(dāng)一個(gè)Gate Server受到攻擊或出現(xiàn)故障時(shí),其他Gate Server不會(huì)受到影響,可以繼續(xù)與Game Server服務(wù)器正常連通,從而保證游戲的正常進(jìn)行,有利于提升系統(tǒng)穩(wěn)定性。Gate Server具有分散功能,將不同的客戶端分批輸入Game Server,不僅可以減輕Game Server服務(wù)器的工作運(yùn)行壓力,也有利于支持更多客戶端的共同游戲需求。除此之外,Gate Server也具有維護(hù)安全的特點(diǎn),為Game Server服務(wù)器分擔(dān)維護(hù)安全的工作,由此提升游戲系統(tǒng)的安全性。
第二,對(duì)于游戲板塊的對(duì)象設(shè)定。應(yīng)用ACE框架中的ACE_Task類和ACE_Message_Queue,聯(lián)系通信地層線程模塊,按照用戶的操作需求,精準(zhǔn)控制游戲?qū)ο螅瑥亩WC游戲?qū)ο螳@得流暢的速度和動(dòng)作姿勢(shì)。當(dāng)用戶調(diào)用對(duì)應(yīng)的操作時(shí),實(shí)現(xiàn)基于通信地層線程的應(yīng)用,操縱對(duì)象根據(jù)指令執(zhí)行對(duì)應(yīng)的動(dòng)作。為給予用戶良好的游戲體驗(yàn),當(dāng)調(diào)用對(duì)象方法時(shí),阻塞調(diào)用線程,避免操作對(duì)象的操作過程和速度被影響,由此提升系統(tǒng)的響應(yīng)靈活性,有利于提升游戲的靈敏性。
第三,服務(wù)器系統(tǒng)通信底層通信模塊的實(shí)現(xiàn)。ACE_Reactor反應(yīng)器可以實(shí)現(xiàn)同步I/O操作,將游戲操作事件進(jìn)行分離或分派,處理多個(gè)用戶需求的多個(gè)I/O操作,滿足多個(gè)用戶的游戲需求。首先,ACE_Event_Handler形成多個(gè)事件的處理器類,為多個(gè)用戶的多個(gè)指令做定義。其次,ACE_Reactor類記錄多個(gè)事件對(duì)應(yīng)的多個(gè)指令,統(tǒng)籌管理指令信息。最后,運(yùn)行ACE_Reactor事件循環(huán),處理多個(gè)事件,回調(diào)事件,形成對(duì)應(yīng)的操作,也達(dá)到系統(tǒng)反饋的目的,穩(wěn)定輸出底層通信流程。
ACE_Proactor應(yīng)用于異步I/O操作,與反應(yīng)器不同的是首先等待事件的完成,然后回調(diào)完成后的事件處理。當(dāng)初始化I/O讀寫后把讀寫交給系統(tǒng)完成,等待事件完成后前攝器會(huì)將執(zhí)行I/O結(jié)果返回給對(duì)象,并且回調(diào)完成后的事件處理。前攝式模型允許單個(gè)應(yīng)用線程同時(shí)發(fā)起多個(gè)請(qǐng)求。這一設(shè)計(jì)允許單線程化應(yīng)用并發(fā)的執(zhí)行多個(gè)I/O操作,并且不會(huì)帶來與傳統(tǒng)的多線程化機(jī)制相關(guān)聯(lián)的開銷或設(shè)計(jì)復(fù)雜性,大大減少I/O處理時(shí)間。
通過基于ACE框架分布式通信服務(wù)器實(shí)現(xiàn)游戲的通信,提高游戲過程通信的流暢性,建立各個(gè)板塊的通信連接,為優(yōu)化游戲提供便利條件。
五、結(jié)語
綜上所述,基于ACE技術(shù),實(shí)現(xiàn)分布式通信服務(wù)器利用數(shù)據(jù)傳輸框架,設(shè)計(jì)、實(shí)現(xiàn)數(shù)據(jù)庫操作接口,搭建分布式日志記錄子系統(tǒng),形成系統(tǒng)動(dòng)態(tài)配置模型,研究數(shù)據(jù)庫接口系統(tǒng),完成分布式通信服務(wù)器的設(shè)計(jì)任務(wù)。同時(shí),落實(shí)分布式通信服務(wù)器的應(yīng)用,將設(shè)計(jì)的基于ACE技術(shù)分布式通信服務(wù)器應(yīng)用于游戲領(lǐng)域,提升通信效率,給予游戲者良好的感受,有利于提升通信服務(wù)水平。
參考文獻(xiàn)
[1]趙東明,靳曉嘉,張繼軍,等.基于知識(shí)圖譜的通信服務(wù)潛在不滿意預(yù)測(cè)系統(tǒng)研究[J].通訊世界,2024,31(01):25-27.
[2]樊輝錦,歐陽中輝,陳青華,等.特種車輛狀態(tài)監(jiān)管系統(tǒng)中通信服務(wù)器的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,2023,40(08):67-71+91.
[3]張金波,沈伍強(qiáng),崔磊,等.基于ARM處理器的均衡計(jì)算型服務(wù)器設(shè)計(jì)[J].信息與電腦(理論版),2023,35(01):111-113.
[4]胡舒席,付麥霞,李永鋒,等.基于Linux系統(tǒng)的高并發(fā)HTTP服務(wù)器設(shè)計(jì)[J].現(xiàn)代信息科技,2022,6(23):90-94.
[5]鄭臣明,姚宣霞,周芳,等.基于硬件虛擬化的云服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)[J].工程科學(xué)學(xué)報(bào),2022,44(11):1935-1945.
作者單位:汕頭職業(yè)技術(shù)部
■ 責(zé)任編輯:張津平、尚丹