基于ACE框架分布式通信服务器设计与应用
2024-12-31韦美兰
摘要:通信服务器是通信领域的核心,也是保证用户正常应用网络的基础,为增强通信服务器的稳定性、提高软件的开发效率,可以将ACE中间件作为开发工具,采取面向对象的编程方法,设计、应用分布式通信服务器,重点解决分布式通信服务器设计过程中遇到的问题。同时,将分布式通信服务器应用于服务器程序开发系统,搭建通信数据传输平台,以此形成完整的ACE框架下分布式通信服务器设计与应用过程,以此降低系统软件开发成本,提升软件系统应用效率。
关键词:ACE框架;分布式通信服务器;通信服务器
一、前言
分布式通信服务器将任务分散到多个计算机上进行协同处理,并通过网络连接在一起实现资源共享和负载均衡。分布式通信服务器具有可靠性、高效性等特点,通过发挥更好的扩展性作用,灵活调整集群大小,独立运行任务,以此加快任务处理速度。在ACE框架下,实现分布式通信服务器,多方面接受和响应客户端的各种请求,为用户提供特定的服务和分享数据,形成庞大的信息、资源传递系统,在交互性、复用性、移植性方面满足不断提高的性能需求,由此发挥软件结构的重要作用。
二、ACE框架简介
ACE框架的作用是降低“连接建立和服务及初始化”与“连接建立成功并完成初始化的后续处理”之间的耦合程度,包括接收器、连接器,见表1。接收器创建、初始化传输端点,被动监听远端连接者的特定地址,连接器主动向远端接收器发出连接信号。通过接收器和连接器,系统自动执行对应的操作语句,建立连接和初始化对端服务。ACE_Connector模式框架的类间关系如图1所示,ACE接收器接收到信息后,传递给某个已连接至本地端的连接对应的服务、ACE连接器,按照操作要求运行客户端或服务器,实现用户服务,并分离初始化服务和后续服务,以此优化服务的扩展性。
三、基于ACE框架分布式通信服务器设计
(一)服务器开发模型的设计
基于ACE框架,设计循环服务器模型,该模型功能的实现得益于UPD协议和Recvfrom()函数。首先,当服务器检测用户的系统请求后,应用Bind()函数、While(true)程序检验系统请求内容是否为空。其次,若不为空,应用Recvfrom()函数读取系统请求内容。再次,应用Process()函数处理系统请求内容。最后,将Sendto()函数将反馈的系统请求内容反馈到客户端,并返回While(true)程序,等待验证下一个用户的请求。通过该循环过程,有利于循环监听用户的实际需求、检测用户的具体需求,及时处理用户的请求,并及时反馈用户请求对应的内容,由此提升通信效率,进一步凸显服务器开发模式的重要作用,符合服务器开发模型的设计需求。
除UPD协议之外,还可以应用TCP协议实现循环式服务器,首先,服务器检测用户的系统请求后,应用Bind()函数、While(true)程序检验系统请求内容是否为空,并按照TCP协议要求帮助通信双方建立通信连接,若不为空,应用Accept ()函数接收通信信息。其次,应用Read()函数和Process()函数处理通信双方建立通信连接请求内容,使用Write ()函数记录通信过程。最后,不断接收通信双方建立通信连接请求,不断返回While(true)程序,直至通信结束,开启Close()函数功能,结束通信循环。
(二)通信服务器I/O的设计
通信服务器I/O的设计涉及I/O完成端口、通信服务器处理线程、利用前摄器实现I/O完成处理三个板块。
在I/O完成端口设计过程,应用CreateIoCompletionPort ()函数创建I/O完成端口,并采用先进先出的方式排列端口,实现I/O完成端口的关联,当完成I/O完成端口设计队列时,检查多个与端口关联的线程,若运行线程数量低于系统并发值,调用处于等待状态的线程处理完成包,若队列属于空状态,继续等待下一个线程处理完成包。当没有更多引用时,完成端口被释放,关闭所有句柄,释放I/O端口和相关系统资源,调用CloseHandle函数关闭I/O完成端口句柄。通过完成I/O完成端口设计,更新状态,进入端口队列。
关于通信服务器处理线程,处理单线程、多线程和每CPU一线程。单线程主要指服务器接收用户的请求内容后,按照时间顺序进入端口队列,等待CPU处理,CPU处理后,逐一接收用户的请求内容,处理时间较长、速度较慢,无法及时处理用户的需求。多线程主要指为每一位用户开辟一个线程,分解CPU的资源,各个线程统一操作,共同完成线程服务任务,给予用户及时答复,切合实际情况。每CPU一线程主要指为每一个CPU分配一个线程,既不需要切换线程,解决处理单线程存在的问题,也不浪费CPU资源,解决多线程存在的问题,从而发挥通信服务器处理线程的重要作用。
利用前摄器实现I/O完成处理,创建完成端口,创建前摄器ACE_Proactor,启动前摄器事件循环,等待I/O完成事件,启动服务器监听,创建完成处理器,处理I/O信息和关闭积套接字,退出事件循环,形成完整的前摄器I/O完成处理过程。
(三)消息可靠运输的设计
ACE提供统一的ACE_Asynch_Operation接口类,将系统处理信息的方法转发到其他类,操作读取各个字节的数据存储结果,更新写指针,指示增加的字节数,并通过参数及priority指定,记录信号量个数signal_number。对于监控终端处理信息的过程,监控终端发起登录请求后,创建完成处理器,调用Open()函数,Read()函数异步读取操作信息,通过注册,Read()函数异步读取操作信息,ACE_Service_Handler调用handle_read_stream()函数,若成功,将信息放入消息队列,若不成功,删除完成处理器[1]。
接收信息后,读取通信链上传递的信息,指明积消息的长度,解析消息长度,以发送并被确认信息后,滑动指针1以发送未被确认,滑动指针2可继续发送,滑动指针3真正收到确认后向前滑动。通过控制发送端的流量,掌握每次接收的数据包,读取消息头和消息体,分解缓冲区数据,若消息头接收完毕,解析消息长度,到缓冲区中提取消息体,了解缓冲区数据,若消息体接收完毕,处理信息,接收完毕。
系统接收信息后,根据接收的消息存储或转发至其他终端,对于不同消息的请求,从键值和映射两个层面实现用户分类,寻找客户端和处理器。从键值和映射两个层面处理信息后,操作同一个消息对象,提高信息转发率,控制数据接收延迟,为后续数据转发提供便利条件。同时,发送信息之前,判断网络连接是否良好,若信息无法正常发送,立即停止信息传递,转变线路,实现底层的信息传递和发送,防止出现数据丢失问题。信息发送完毕后,释放内存,调用release()函数,顺利完成内存释放[2]。
(四)数据库的设计
对于类Web开发范式组件,根据组件从前端到后端的过程,可以将整个框架划分为JsFrameWork、DomNode、ComPonent、RenderNode四个模块。
JsFrameWork框架模块,负责解析前端html和css文件,创建出DomNode树。该树的结构和前端页面是一一对应的。
DomNode框架模块,负责将Dom树转换为Component树。注意一个Dom节点转换过后的Component节点实际上并不是一个单独的节点,而是一棵以rootComponent为根节点的组件树。该树中逐层包裹了对应的功能组件,最内部才是真正的主节点(这样的作用是功能解耦合,将某一特定的功能放到对应的组件中去)。BoxComponet负责组件的边框绘制,DisplayComponent负责组件透明度绘制,TouchComponent负责组件触摸时间的处理等。
ComPonent框架模块,负责将Component树中所有继承自RenderComponent的节点(可绘制节点)创建对应的RendNode节点,生成对应的RendNode树。
RenderNode框架模块,RenderNode即可绘制的节点,负责组件的最终布局和绘制。布局函数为PerformLayout虚函数,由每个组件对应的实现类Render类来实现[3]。绘制函数为Paint虚函数,由每个组件对应的子类FlutterRender类实现。
(五)日志处理的设计
利用ACE_Reactor框架设计、实现分布式日记记录服务,保存日志运行信息,及时了解用户信息以及客户端的运行状态。日志处理服务器应用到Logging Acceptor、Logging Handler、ACE Acceptor、ACE Svc Handler、Event Handler、Peer Acceptor、Peer Stream、Reactor组件,由此保存系统运行的信息,发挥日志处理设计板块的重要作用,方便记录系统的工作过程。同时,涉及应用程序记录接口、客户端记录程序等关键组件,通过不断接收、重新组织、输出客户端的日志数据,增强系统的扩展性。
(六)配置处理的设计
关于基于ACE框架分布式通信服务器的配置处理,实现静态和动态设计。静态配置主要指服务器启动配置文件加载的过程,按照特定要求加载指定内容。动态配置主要指输出可配置的必要参数,如IP地址、线程池参数等,调用接口激活、挂起、恢复、终止一个服务,由此获取一个服务的动态运行信息,集中管理和控制可配置服务的行为[4]。
(七)通信服务器功能的设计
基于ACE框架分布式通信服务器的功能十分复杂,显示的界面内容十分重要,通过考查服务器的运行状况或调试内容,了解配置处理、日志处理等功能,统筹通信服务器的作用和功能,了解通信数据库服务的调度情况,掌握数据接收、转发情况,分析存储数据的消耗情况,及时处理信息、解析服务器,致力于得到最新、重新连接的数据[5]。同时,设置清零、复位功能,有利于落实新的算法,快速得到服务器计算结果,从而提升基于ACE框架分布式通信服务器的便捷性。
四、基于ACE框架分布式通信服务器的应用
计算机背景下,开发基于ACE框架分布式通信服务器,将其应用于网络游戏的设计过程,突破网络游戏通信服务器的难点,加强游戏沟通的流畅性,致力于给予用户良好的感受,从而发挥基于ACE框架分布式通信服务器的重要作用。对于传统的通信服务器,无法广泛应用软件设计模式,开发代码较长,容易出现信息交流卡顿问题,无法将流畅性落到实处。当系统执行任务时,各个模块团结协作,形成流畅的运作流程,而各个模块之间的通信、关系十分复杂,不同模块的配合情况更容易影响数据及通信效果,不利于提升通信效率。编程人员从底部开发系统,但无形中增加了软件开发的难度和周期。因此,将ACE框架分布式通信服务器应用于网络游戏中,降低软件开发的难度,控制软件开发的周期。
第一,支持Gate的游戏服务器架构的实现。实现Client和Gate Server相连,用户直接通过Gate Setver和游戏服务器Game Servet相连,采用“一对多”的方式,利用一个Game Server对应多个Gate Server,当一个Gate Server受到攻击或出现故障时,其他Gate Server不会受到影响,可以继续与Game Server服务器正常连通,从而保证游戏的正常进行,有利于提升系统稳定性。Gate Server具有分散功能,将不同的客户端分批输入Game Server,不仅可以减轻Game Server服务器的工作运行压力,也有利于支持更多客户端的共同游戏需求。除此之外,Gate Server也具有维护安全的特点,为Game Server服务器分担维护安全的工作,由此提升游戏系统的安全性。
第二,对于游戏板块的对象设定。应用ACE框架中的ACE_Task类和ACE_Message_Queue,联系通信地层线程模块,按照用户的操作需求,精准控制游戏对象,从而保证游戏对象获得流畅的速度和动作姿势。当用户调用对应的操作时,实现基于通信地层线程的应用,操纵对象根据指令执行对应的动作。为给予用户良好的游戏体验,当调用对象方法时,阻塞调用线程,避免操作对象的操作过程和速度被影响,由此提升系统的响应灵活性,有利于提升游戏的灵敏性。
第三,服务器系统通信底层通信模块的实现。ACE_Reactor反应器可以实现同步I/O操作,将游戏操作事件进行分离或分派,处理多个用户需求的多个I/O操作,满足多个用户的游戏需求。首先,ACE_Event_Handler形成多个事件的处理器类,为多个用户的多个指令做定义。其次,ACE_Reactor类记录多个事件对应的多个指令,统筹管理指令信息。最后,运行ACE_Reactor事件循环,处理多个事件,回调事件,形成对应的操作,也达到系统反馈的目的,稳定输出底层通信流程。
ACE_Proactor应用于异步I/O操作,与反应器不同的是首先等待事件的完成,然后回调完成后的事件处理。当初始化I/O读写后把读写交给系统完成,等待事件完成后前摄器会将执行I/O结果返回给对象,并且回调完成后的事件处理。前摄式模型允许单个应用线程同时发起多个请求。这一设计允许单线程化应用并发的执行多个I/O操作,并且不会带来与传统的多线程化机制相关联的开销或设计复杂性,大大减少I/O处理时间。
通过基于ACE框架分布式通信服务器实现游戏的通信,提高游戏过程通信的流畅性,建立各个板块的通信连接,为优化游戏提供便利条件。
五、结语
综上所述,基于ACE技术,实现分布式通信服务器利用数据传输框架,设计、实现数据库操作接口,搭建分布式日志记录子系统,形成系统动态配置模型,研究数据库接口系统,完成分布式通信服务器的设计任务。同时,落实分布式通信服务器的应用,将设计的基于ACE技术分布式通信服务器应用于游戏领域,提升通信效率,给予游戏者良好的感受,有利于提升通信服务水平。
参考文献
[1]赵东明,靳晓嘉,张继军,等.基于知识图谱的通信服务潜在不满意预测系统研究[J].通讯世界,2024,31(01):25-27.
[2]樊辉锦,欧阳中辉,陈青华,等.特种车辆状态监管系统中通信服务器的设计[J].计算机应用与软件,2023,40(08):67-71+91.
[3]张金波,沈伍强,崔磊,等.基于ARM处理器的均衡计算型服务器设计[J].信息与电脑(理论版),2023,35(01):111-113.
[4]胡舒席,付麦霞,李永锋,等.基于Linux系统的高并发HTTP服务器设计[J].现代信息科技,2022,6(23):90-94.
[5]郑臣明,姚宣霞,周芳,等.基于硬件虚拟化的云服务器设计与实现[J].工程科学学报,2022,44(11):1935-1945.
作者单位:汕头职业技术部
■ 责任编辑:张津平、尚丹