首页 > 其他分享 >QM游戏服务器框架

QM游戏服务器框架

时间:2024-09-14 11:03:43浏览次数:1  
标签:框架 自定义 class Application 消息 服务器 QM public

QM仓库链接

QM 一个简单易用的、可拓展的游戏服务器框架

    完全使用c sharp开发,包括了游戏服务器所需的基本组件。
    QM的架构设计使得伸缩QM伸缩性非常好,很容易进行集群和分布式开发。
    特性:
    1.依托dotnetty线程模型处理消息,性能非常不错
    2.支持async/await编程,避免阻塞线程
    3.Connector服务器根据路由转发消息到Server服务器,非常容易支持集群(参考pomelo)
    4.支持自定义消息协议,自定义消息,自定义事件
    5.代码简单易懂,适合进行二次定制,同时有不错的性能

1. 涉及技术

TCP通信使用dotnetty、消息序列化使用messagepack、rpc二次开发自DotNettyRpc、服务器发现Zookeeper

2. 支持四种消息类型的消息

分别是request,response,notify和push,客户端发起request到服务器端,服务器端处理后会给其返回响应response;notify是客户端发给服务端的通知,也就是不需要服务端给予回复的请求;push是服务端主动给客户端推送消息的类型。

3. 开始使用

主要解释Component、自定义消息、事件系统EventSystem,其中可以通过自定义Component实现不同业务,不同服务器装载不同Component,使得不同服务器的开发变得异常简单。

1. 启动服务器

Application application = Application.CreateApplication("Room01", Application.Server, 9999);
application.AddComponent(new RoomComp());
application.Start();

2. 如何实现自定义组件

需要继承Compoment,Component有三个生命周期:start,afterStart,stop

public class RoomComp : Component

3. 如何自定义消息

[MessageDispatch]会将消息转发到指定的服务器
[MessageIndex]指定消息编号,需要唯一,编码时使用
[MessagePackObject]是messagepack提供的
继承自IRequest代表消息类型是request,同理IResponse,INotify和IPush

[MessageDispatch(ServerType.Server)]
[MessageIndex(1)]
[MessagePackObject]
public class UserRequest : IRequest

4. 如何自定义消息处理器

使用 [MessageHandler]标记为消息处理器,继承MessageHandler实现Run方法实现业务逻辑

 [MessageHandler]
 public class UserMessageHandler : MessageHandler<UserRequest, UserResponse>
 {
     protected async override Task Run(UserRequest request, UserResponse response, ISession session)
     {
         response.Name = request.Name;
     }
 }

5. 如何使用EventSystem

继承IEvent自定义Event

public class UserAddEvent : IEvent
{
    public RemoteSession Session { get; set; }
}

使用[EventHandler]标记为事件处理器,继承EventHandler重写Run方法实现具体业务

 [EventHandler]
 public class UserAddEventHandler : EventHandler<UserAddEvent>
 {
     public override async Task Run(UserAddEvent e)
     {
         UserPush userPush = new UserPush() { Name = "push" };
         await Application.current.GetComponent<RpcComp>().PushToConnector(userPush, e.Session.serverId, e.Session.Sid);

         UserPush userPush1 = new UserPush() { Name = "broadcast" };
         await Application.current.GetComponent<RpcComp>().Broadcast(userPush1);
     }
 }

发送一个事件

await EventSystem.Instance.Publish(new UserAddEvent() { Session = remoteSession });

6.自定义Filter

Filter的before会在消息执行处理之前调用,可以对消息进行拦截,after则是在response发送之后执行。

[Filter(includeServer = Application.Connector)]
public class HeartBeatFilter : Filter

标签:框架,自定义,class,Application,消息,服务器,QM,public
From: https://www.cnblogs.com/codedawn/p/18413553

相关文章

  • Android开发使用WebSocket时如何构建数据通讯框架
    前言之前我们介绍过服务端使用WebSocket如何设计数据框架,现在我们看看客户端如何与它通讯。如果光说要用WebSocket做一个例子,相信很多小伙伴都能搞通,网上这么多资料。随便拿一个过来,调通就行了。不过,做出来与把它做好是两码事。我们的目标是,不但要把数据调通,还要把它梳理完善......
  • Linux系统中重启服务器的方法!
    在Linux操作系统中,提供了多种方法用于重启服务器,那么Linux服务器如何重启?以下列举了常用的几种方法,希望对大家有所帮助,快来看看吧。重启Linux服务器有以下几种方法:1、使用命令行使用reboot命令reboot使用shutdown命令shutdown-rnow2、使用syste......
  • 【随记】服务器安装并配置jupyter notebook,并使用vscode扩展进行连接
    重新新建虚拟环境(如果使用的是miniconda),安装好需要使用的第三方库进入环境后condainstalljupyter为当前环境安装jupyter服务使用python3进入命令行交互,输入以下命令配置登陆密钥fromjupyter_server.authimportpasswdpasswd()运行结束后会返回一串hash后的密钥数......
  • 1、.Net UI框架:Blazor Hybrid - .Net宣传系列文章
    BlazorHybrid是.NET6中引入的一个新特性,它允许开发者使用Blazor技术开发跨平台的桌面和移动应用程序。BlazorHybrid结合了BlazorWebAssembly和BlazorServer的优势,提供了一种在桌面和移动设备上运行Blazor应用的方法。BlazorHybrid的关键特性包括:跨......
  • pandas-ai 基于LLM进行数据分析的python 框架
    pandas-ai基于LLM进行数据分析的python框架包含的特性基于自然语言的数据查询数据可视化数据清理特征生成数据链接(支持链接多种不同的数据源)说明对于基于数据分析的场景pandas-ai是一个值得尝试的工具,同时官方也微调了一个BambooLLM的模型(基于mistral)目前也已经在huggingface......
  • QT6 QML编程
    QT6QML编程使用AI技术辅助生成[QT界面美化视频课程](https://edu.csdn.net/lecturer/7637)[QT性能优化视频课程](https://edu.csdn.net/lecturer/7637)[QT原理与源码分析视频课程](https://edu.csdn.net/lecturer/7637)[QTQMLC++扩展开发视频课程](https://edu.csdn.net/lectu......
  • 2、.Net 前端框架:ASP.Net Core - .Net宣传系列文章
    ASP.NETCore是一个跨平台、高性能、开源的框架,用于构建现代化的、基于云的、互联网连接的应用程序。它是微软对原始ASP.NET框架的重构和扩展,提供了更多的灵活性和改进的性能。ASP.NETCore可以用于开发Web应用程序、WebAPI、以及服务端渲染的Web页面。ASP.NETC......
  • 基于Java中的SSM框架实现小说阅读网站书城管理平台项目【项目源码+论文说明】计算机毕
    基于java中的SSM框架实现小说阅读网站书城管理平台演示【内附项目源码+LW说明】摘 要简单而言信息化就是为了人们的生活便利所带来的新时代的东西,有了淘宝、京东,我们可以进行网购漂亮的衣服;有了快手、抖音我们可以真实的感受主播给我们带来最真实的货物;有了美团我们可以......
  • 基于Uni-app前端框架的SUMER UI3.0组件库!一端开发,多端运行!本组件库可快速二次开发各种
    基于Uni-app前端框架的SUMERUI3.0组件库!一端开发,多端运行!本组件库可快速二次开发各种类别各行业模板,包括:商城、视频、直播、聊天、支付、新闻、社区、地图、导航、出行、社区、博客等sumer-ui介绍基于uView微信小程序UI组件库,兼容vue3。本插件是SUMER组件库,只提供组件......
  • Dubbo框架的1个核心设计点
    Java领域要说让我最服气的RPC框架当属Dubbo,原因有许多,但是最吸引我的还是它把远程调用这个事情设计得很有艺术。1、Dubbo优点较多,我只钟情其一1.1、优点业内对于微服务之间调用的框架选择较多,主流是SpringCloud的Rest方式和Dubbo方式,我使用Dubbo方式居多。Dubbo工业级可用......