自己建一个网站怎么赚钱,wordpress怎么修改logo,宣传片拍摄方案范本,临沂建网站哪家好很久之前#xff0c;在博客园写了一篇文章#xff0c;《分布式网游server的一些想法语言和平台的选择》#xff0c;当时就有了用C#做网游服务端的想法。写了个Unity3d客户端分布式服务端框架#xff0c;最近发布了1.0版本#xff0c;取名ET框架。ET框架的目标就是简化客户…很久之前在博客园写了一篇文章《分布式网游server的一些想法语言和平台的选择》当时就有了用C#做网游服务端的想法。写了个Unity3d客户端分布式服务端框架最近发布了1.0版本取名ET框架。ET框架的目标就是简化客户端开发简化分布式服务端开发但是功能非常强大完全可以作为一个大型分布式服务端使用。ET框架有很多创造性的设计
1.可用VS单步调试的分布式服务端N变1
一般来说分布式服务端要启动很多进程一旦进程多了单步调试就变得非常困难导致服务端开发基本上靠打log来查找问题。平常开发游戏逻辑也得开启一大堆进程不仅启动慢而且查找问题及其不方便要在一堆堆日志里面查问题这感觉非常糟糕这么多年也没人解决这个问题。ET框架使用了类似守望先锋的组件设计所有服务端内容都拆成了一个个组件启动时根据服务器类型挂载自己所需要的组件。这有点类似电脑电脑都模块化的拆成了内存CPU主板等等零件搭配不同的零件就能组装成一台不同的电脑例如家用台式机需要内存CPU主板显卡显示器硬盘。而公司用的服务器却不需要显示器和显卡网吧的电脑可能不需要硬盘等。正因为这样的设计ET框架可以将所有的服务器组件都挂在一个服务器进程上那么这个服务器进程就有了所有服务器的功能一个进程就可以作为整组分布式服务器使用。这也类似电脑台式机有所有的电脑组件那它也完全可以当作公司服务器使用也可以当作网吧电脑。我们开发的时候就只需要启动一个服务器进程这个服务器进程就可以用VS启动那么当然就可以使用VS进行单步调试了。
2.随意可拆分功能的分布式服务端1变N
分布式服务端要开发多种类型的服务器进程比如Login servergate serverbattle serverchat server friend server等等一大堆各种server传统开发方式需要预先知道当前的功能要放在哪个服务器上当功能越来越多的时候比如聊天功能之前在一个中心服务器上之后需要拆出来单独做成一个服务器这时会牵扯到大量迁移代码的工作烦不胜烦。ET框架在平常开发的时候根本不太需要关心当前开发的这个功能会放在什么server上只用一个进程进行开发功能开发成组件的形式。发布的时候使用一份多进程的配置即可发布成多进程的形式是不是很方便呢随便你怎么拆分服务器。只需要修改极少的代码就可以进行拆分。不同的server挂上不同的组件就行了嘛
3.跨平台的分布式服务端
ET框架使用C#做服务端现在C#是完全可以跨平台的在linux上安装mono即可不需要修改任何代码就能跑起来。性能方面因为.net已经开源mono已经被微软收购现在mono的性能很强测试了只比windows慢一点点比luapython什么快的多了。做游戏服务端完全不在话下。平常我们开发的时候用VS在windows上开发调试发布的时候发布到linux上即可。ET框架还提供了一键同步工具打开unity-tools-rsync同步即可同步代码到linux上
./Run.sh Config/StartConfig/192.168.12.188.txt
即可编译启动服务器。
4.提供协程支持
C#天生支持异步变同步语法 async和await比luapython的协程强大的多新版python以及javascript语言甚至照搬了C#的协程语法。分布式服务端大量服务器之间的远程调用没有异步语法的支持开发将非常麻烦。所以java没有异步语法做单服还行不适合做大型分布式游戏服务端。例如
// 发送C2R_Ping并且等待响应消息R2C_PingR2C_Ping pong await session.CallR2C_Ping(new C2R_Ping());
Log.Debug(收到R2C_Ping);// 向mongodb查询一个id为1的Player并且等待返回Player player await Game.Scene.GetComponentDBProxyComponent().QueryPlayer(1);
Log.Debug($打印player name: {player.Name})
可以看出有了async await所有的服务器间的异步操作将变得非常连贯不用再拆成多段逻辑。大大简化了分布式服务器开发
5.提供类似erlang的actor消息机制
erlang语言一大优势就是位置透明的消息机制用户完全不用关心对象在哪个进程拿到id就可以对对象发送消息。ET框架也提供了actor消息机制实体对象只需要挂上ActorComponent组件这个实体对象就成了一个Actor任何服务器只需要知道这个实体对象的id就可以向其发送消息完全不用关心这个实体对象在哪个server在哪台物理机器上。其实现原理也很简单ET框架提供了一个位置服务器所有挂载ActorComoponet的实体对象都会将自己的id跟位置注册到这个位置服务器其它服务器向这个实体对象发送消息的时候如果不知道这个实体对象的位置会先去位置服务器查询查询到位置再进行发送。
6.提供服务器不停服动态更新逻辑功能
热更是游戏服务器不可缺少的功能ET框架使用的组件设计可以做成守望先锋的设计组件只有成员无方法将所有方法做成扩展方法放到热更dll中运行时重新加载dll即可热更所有逻辑。
7.客户端热更新一键切换
因为ios的限制之前unity热更新一般使用lua导致unity3d开发人员要写两种代码麻烦的要死。之后幸好出了ILRuntime库利用ILRuntime库unity3d可以利用C#语言加载热更新dll进行热更新。ILRuntime一个缺陷就是开发时候不支持VS debug这有点不爽。ET框架使用了一个预编译指令ILRuntime可以无缝切换。平常开发的时候不使用ILRuntime而是使用Assembly.Load加载热更新动态库这样可以方便用VS单步调试。在发布的时候定义预编译指令ILRuntime就可以无缝切换成使用ILRuntime加载热更新动态库。这样开发起来及其方便再也不用使用狗屎lua了
8.客户端服务端用同一种语言并且共享代码
下载ET框架打开服务端工程可以看到服务端引用了客户端很多代码通过引用客户端代码的方式实现了双端共享代码。例如客户端服务端之间的网络消息两边完全共用一个文件即可添加一个消息只需要修改一遍。
9.UDP TCP协议无缝切换
ET框架不但支持TCP而且支持可靠的UDP协议UDP支持是封装了ENet库ENet也是英雄联盟所使用的网络库其特点是快速并且网络丢包的情况下性能也非常好这个我们做过测试TCP在丢包5%的情况下moba游戏就卡的不行了但是使用ENet丢包20%仍然不会感到卡。非常强大。
10 还有很多很多功能我就不详细介绍了
a.及其方便检查CPU占用和内存泄漏检查vs自带分析工具不用再为性能和内存泄漏检查而烦恼b.使用NLog库打log及其方便平常开发时可以将所有服务器log打到一个文件中再也不用一个个文件搜索log了c.统一使用Mongodb的bson做序列化消息和配置文件全部都是bson或者json并且以后使用mongodb做数据库再也不用做格式转换了。d.提供一个强大的ai行为树工具e.提供一个同步工具f.提供命令行配置工具配置分布式非常简单
ET框架的服务端是一个强大灵活的分布式服务端架构完全可以满足绝大部分大型游戏需求。使用这套框架客户端开发者就可以自己完成双端开发节省大量人力物力节省大量沟通时间。
代码地址https://github.com/egametang/Egametang讨论QQ群 : 474643097
使用方法1.用git clone代码下来安装Unity 2017.1p5 和VS20172.vs打开Unity/Unity.sln,编译3.再启动一个vs打开Server/Server.sln编译4.打开Unity-tools菜单-命令行配置选择LocalAllServer.txt 这是启动单一App的方式如果要启动一组多App服务器在命令行工具中选择127.0.0.1.txt,点击启动即可具体配置都可以自己用这个命令行配置工具修改5.点击工具中的启动这样就启动了服务端也可以用VS启动方便单步调试7.运行Unity输入帐号点击登录这时日志 连接Gate成功表示运行OK
原文地址http://www.cnblogs.com/egametang/p/7486180.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注