提交 ce3a0ac4 编写于 作者: T tanghai

更新readme

上级 df614faf
......@@ -13,7 +13,7 @@ ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,
### 2.随意可拆分功能的分布式服务端,1变N
分布式服务端要开发多种类型的服务器进程,比如Login server,gate server,battle server,chat server friend server等等一大堆各种server,传统开发方式需要预先知道当前的功能要放在哪个服务器上,当功能越来越多的时候,比如聊天功能之前在一个中心服务器上,之后需要拆出来单独做成一个服务器,这时会牵扯到大量迁移代码的工作,烦不胜烦。ET框架在平常开发的时候根本不太需要关心当前开发的这个功能会放在什么server上,只用一个进程进行开发,功能开发成组件的形式。发布的时候使用一份多进程的配置即可发布成多进程的形式,是不是很方便呢?随便你怎么拆分服务器。只需要修改极少的代码就可以进行拆分。不同的server挂上不同的组件就行了嘛!
### 3.跨平台的分布式服务端
ET框架使用C#做服务端,现在C#是完全可以跨平台的,在linux上安装.netcore,即可,不需要修改任何代码,就能跑起来。性能方面,现在.netcore的性能非常强,比lua,python,js什么快的多了。做游戏服务端完全不在话下。平常我们开发的时候用VS在windows上开发调试,发布的时候发布到linux上即可。ET框架还提供了一键同步工具,打开unity->tools->rsync同步,即可同步代码到linux上
ET框架使用C#做服务端,现在C#是完全可以跨平台的,在linux上安装.netcore,即可,不需要修改任何代码,就能跑起来。性能方面,现在.netcore的性能非常强,比lua,python,js什么快的多了。做游戏服务端完全不在话下。平常我们开发的时候用VS在windows上开发调试,发布的时候发布到linux上即可。ET框架还提供了一键同步工具,打开unity->tools->rsync同步,即可同步代码到linux上
```bash
./Run.sh Config/StartConfig/192.168.12.188.txt
```
......@@ -23,7 +23,7 @@ C#天生支持异步变同步语法 async和await,比lua,python的协程强
```c#
// 发送C2R_Ping并且等待响应消息R2C_Ping
R2C_Ping pong = await session.Call<R2C_Ping>(new C2R_Ping());
R2C_Ping pong = await session.Call(new C2R_Ping()) as R2C_Ping;
Log.Debug("收到R2C_Ping");
// 向mongodb查询一个id为1的Player,并且等待返回
......@@ -32,10 +32,10 @@ Log.Debug($"打印player name: {player.Name}")
```
可以看出,有了async await,所有的服务器间的异步操作将变得非常连贯,不用再拆成多段逻辑。大大简化了分布式服务器开发
### 5.提供类似erlang的actor消息机制
erlang语言一大优势就是位置透明的消息机制,用户完全不用关心对象在哪个进程,拿到id就可以对对象发送消息。ET框架也提供了actor消息机制,实体对象只需要挂上ActorComponent组件,这个实体对象就成了一个Actor,任何服务器只需要知道这个实体对象的id就可以向其发送消息,完全不用关心这个实体对象在哪个server,在哪台物理机器上。其实现原理也很简单,ET框架提供了一个位置服务器,所有挂载ActorComoponet的实体对象都会将自己的id跟位置注册到这个位置服务器,其它服务器向这个实体对象发送消息的时候如果不知道这个实体对象的位置,会先去位置服务器查询,查询到位置再进行发送。
erlang语言一大优势就是位置透明的消息机制,用户完全不用关心对象在哪个进程,拿到id就可以对对象发送消息。ET框架也提供了actor消息机制,实体对象只需要挂上MailBoxComponent组件,这个实体对象就成了一个Actor,任何服务器只需要知道这个实体对象的id就可以向其发送消息,完全不用关心这个实体对象在哪个server,在哪台物理机器上。其实现原理也很简单,ET框架提供了一个位置服务器,所有挂载MailBoxComponent的实体对象都会将自己的id跟位置注册到这个位置服务器,其它服务器向这个实体对象发送消息的时候如果不知道这个实体对象的位置,会先去位置服务器查询,查询到位置再进行发送。
### 6.提供服务器不停服动态更新逻辑功能
热更是游戏服务器不可缺少的功能,ET框架使用的组件设计,可以做成守望先锋的设计,组件只有成员,无方法,将所有方法做成扩展方法放到热更dll中,运行时重新加载dll即可热更所有逻辑。
### 7.客户端热更新一键切换
### 7.客户端使用C#热更新,热更新一键切换
因为ios的限制,之前unity热更新一般使用lua,导致unity3d开发人员要写两种代码,麻烦的要死。之后幸好出了ILRuntime库,利用ILRuntime库,unity3d可以利用C#语言加载热更新dll进行热更新。ILRuntime一个缺陷就是开发时候不支持VS debug,这有点不爽。ET框架使用了一个预编译指令ILRuntime,可以无缝切换。平常开发的时候不使用ILRuntime,而是使用Assembly.Load加载热更新动态库,这样可以方便用VS单步调试。在发布的时候,定义预编译指令ILRuntime就可以无缝切换成使用ILRuntime加载热更新动态库。这样开发起来及其方便,再也不用使用狗屎lua了
### 8.客户端全热更新
客户端可以实现所有逻辑热更新,包括协议,config,ui等等
......@@ -47,7 +47,7 @@ ET框架不但支持TCP,而且支持可靠的UDP协议(ENET跟KCP),ENet
可以Unity导出场景数据,给服务端做recast寻路。做MMO非常方便,demo演示了服务端3d寻路功能
### 12. 服务端支持repl,也可以动态执行一段新代码
这样就可以打印出进程中任何数据,大大简化了服务端查找问题的难度
这样就可以打印出进程中任何数据,大大简化了服务端查找问题的难度,开启repl方法,直接在console中输入repl回车即可进入repl模式
### 13.打包工具
ET框架带有一整套打包工具,完全傻瓜式。一键打包,自动分析共享资源。对比md5更新
......@@ -73,7 +73,7 @@ ET框架的服务端是一个强大灵活的分布式服务端架构,完全可
群友分享:
[行为树与fgui分支(Duke Chiang开发维护)](https://github.com/DukeChiang/ET.git)
[ET学习笔记系列(烟雨迷离半世殇写)](https://blog.csdn.net/qq_15020543/article/details/86766326)
[ET学习笔记系列(烟雨迷离半世殇写)](https://www.lfzxb.top/)
[ET学习笔记系列(咲夜詩写)](https://acgmart.com/unity/)
[框架服务端运行流程](http://www.cnblogs.com/fancybit/p/et1.html)
[ET启动配置](http://www.cnblogs.com/fancybit/p/et2.html)
......
......@@ -5,8 +5,11 @@ PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
......
{"Version":0,"TotalSize":0,"FileInfoDict":{"code.unity3d":{"File":"code.unity3d","MD5":"571dd8efb2718cbad37d3d662f2609ec","Size":61778},"code.unity3d.manifest":{"File":"code.unity3d.manifest","MD5":"8c085ae636cc57ee9ab9c2eb07a92cdc","Size":657},"config.unity3d":{"File":"config.unity3d","MD5":"5d66c8fe19b295bf0fbb9643ba49367d","Size":1832},"config.unity3d.manifest":{"File":"config.unity3d.manifest","MD5":"30d1d4f7e691402897e060bbca3b6dd7","Size":623},"StreamingAssets":{"File":"StreamingAssets","MD5":"a7de6c4a297376ad9387d84a404a355d","Size":1100},"StreamingAssets.manifest":{"File":"StreamingAssets.manifest","MD5":"c301563dbb951e3dbb0ff87966a55c80","Size":388},"uilobby.unity3d":{"File":"uilobby.unity3d","MD5":"6a99502cbef4d2d3ec0ae14e1d98870a","Size":6983},"uilobby.unity3d.manifest":{"File":"uilobby.unity3d.manifest","MD5":"0c5b8c3ee1dcb36d228e531429bcf72c","Size":1110},"uilogin.unity3d":{"File":"uilogin.unity3d","MD5":"1914ea28a75e47fcd5f2f4c047f42067","Size":7716},"uilogin.unity3d.manifest":{"File":"uilogin.unity3d.manifest","MD5":"b263c81e4a771be64f89e2becc46307d","Size":1202},"unit.unity3d":{"File":"unit.unity3d","MD5":"8f9a8f9db6ba375e857d42c60fb13fe9","Size":563234},"unit.unity3d.manifest":{"File":"unit.unity3d.manifest","MD5":"a1feb8b63641c1736b3674e9b2fe2974","Size":850},"Version.txt":{"File":"Version.txt","MD5":"1d76720b1850fe3b1d24a63e9633f671","Size":1389}}}
\ No newline at end of file
{"Version":0,"TotalSize":0,"FileInfoDict":{"code.unity3d":{"File":"code.unity3d","MD5":"3fd5a101e91649734a4ee5bb18195d31","Size":37600},"code.unity3d.manifest":{"File":"code.unity3d.manifest","MD5":"7834f04df4f9cf7c7613cbb2d2d15020","Size":621},"config.unity3d":{"File":"config.unity3d","MD5":"031fba3dfe33371107394cd79dcbea7e","Size":1837},"config.unity3d.manifest":{"File":"config.unity3d.manifest","MD5":"58076bb3651456e7f2ca989c4bdb61ce","Size":624},"map.unity3d":{"File":"map.unity3d","MD5":"21486c5b1881a5a356dfd7a4b6a544b0","Size":340485},"map.unity3d.manifest":{"File":"map.unity3d.manifest","MD5":"6c91c8f4af267bde9587125a41912c0e","Size":1074},"StreamingAssets":{"File":"StreamingAssets","MD5":"c542ac37c050dc81d69ba9fde8794466","Size":1151},"StreamingAssets.manifest":{"File":"StreamingAssets.manifest","MD5":"eda6a4293269bf39721b07542f5435ec","Size":447},"uilobby.unity3d":{"File":"uilobby.unity3d","MD5":"d5fb2010adcbd5b2d46a667a679db458","Size":7892},"uilobby.unity3d.manifest":{"File":"uilobby.unity3d.manifest","MD5":"c07ac5ff750a61c2f8b050cbfdc2e132","Size":1244},"uilogin.unity3d":{"File":"uilogin.unity3d","MD5":"16b7802479f8d308a0020b603c570637","Size":8656},"uilogin.unity3d.manifest":{"File":"uilogin.unity3d.manifest","MD5":"e2c0e482a59b00da5586fdbfd42884da","Size":1336},"unit.unity3d":{"File":"unit.unity3d","MD5":"4a2d10861fec23cba4cebc4cefea1790","Size":573474},"unit.unity3d.manifest":{"File":"unit.unity3d.manifest","MD5":"ff94c0e02ee9af25ca96e8765d5beb85","Size":850},"Version.txt":{"File":"Version.txt","MD5":"0a55ff56e60511a87aea0b15c846c7f1","Size":1589}}}
\ No newline at end of file
......@@ -672,7 +672,7 @@ PlayerSettings:
iOS: 2
scriptingBackend:
Android: 0
Standalone: 0
Standalone: 1
iOS: 1
il2cppCompilerConfiguration: {}
managedStrippingLevel: {}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册