预览版已发布
ET8 预览版! 17岁亦菲
- 多线程多进程架构,架构更加灵活强大
- 抽象出纤程(Fiber)的概念,类似erlang的进程,非常轻松的创建多个纤程,利用多核
- 纤程调度: 主线程,线程池,每个纤程一个线程,3种调度方式
- Fiber间通信的Actor消息机制
- Entity方面,domain改成IScene,只要实现IScene接口,Entity就是domain,这样定义domain更加自由
- 预测回滚的帧同步实现 想详细了解可以看帧同步课程
- protobuf换成了memorypack,实现无gc的网络
- 纯C#版的kcp库,性能非常强,由sj提交
- 热更dll改成用ide编译,更加方便
- sj利用source generater实现了代码自动模板功能,目前可以自动生成System类,开发者只需要定义Awake Update静态方法即可,特别方便
- sj开发了分析器,实现了EntitySystemOf,根据entity接口一键生成对应的system方法
- 客户端利用fiber实现网络独立线程(demo已实现),甚至可以把逻辑跟表现使用独立的纤程,更好的利用多核
- 帧同步demo直接利用纤程创建房间,更加方便
熊猫-需要课程请私聊,其它请论坛提问 2023/7/6 18:38:56
et8今天已经彻底开发完成,虽然改成多线程我只用了一个月的时间,但是开源后你们会被惊艳到。绝对是一个非常完善的实现,各个方面我都考虑得十分全面了,甚至很多地方实现的更优美了,比如网络多线程部分,网络只需要写成单线程的组件,创建一个纤程挂上网络组件就实现了网络多线程。
熊猫-需要课程请私聊,其它请论坛提问 2023/7/12 15:29:42
et8预览版已经提交
虽然是预览版,但是代码完成度非常高,应该找不出啥bug
et8是全能框架了,做web或者app服务器都没问题
开发者基本上还是写单线程,没区别
吊打微软的奥尔良框架
///////////////以下信息过时/////////////
熊猫-接咨询定制等业务,有需要请私聊 2023/5/16 16:04:20
吃鸽员红隼#即刻使用ET8VIP版,版本领先群友# et8马上出来了
@吃鸽员红隼#即刻使用ET8VIP版,版本领先群友# 瞎扯,et8至少还要一年 , ET8包括帧同步框架,帧同步并不是et8
课程预告?
熊猫-需要课程请私聊,其它请论坛提问 2023/6/19 17:00:35
下一门课就是et8了
纤程
熊猫-需要课程请私聊,其它请论坛提问 2023/7/3 18:55:45
et6 et7会了,会很容易上手et8。整个开发思路会有所变化,比如开房间,直接创建一个纤程即可,会更加简单
纤程就是ET的虚拟进程,跟erlang的进程一个概念
Windows中就有纤程fiber,一个线程可以有很多纤程。我借用一下这个词
开发体验跟单线程一样,但是又能利用多核
虽然et8是多线程,但是都是在fiber中开发,开发体验还是单线程的
熊猫-需要课程请私聊,其它请论坛提问 2023/7/3 19:26:49
老中医
et咋做能支撑这么多,还是得多进程吧
@老中医 是的,多进程,多纤程
ET借用fiber这个词,fiber就是erlang的进程概念
多线程&虚拟进程
虚拟进程其实就是一个root的entity。所有虚拟进程跑在一个线程就是单线程了,跟et7区别不大。跑在多个线程上就是多线程了。开发的时候用单线程,好调试,发布的时候用多线程,省内存
熊猫 2023/6/19 16:47:40
Fx&std @熊猫 小游戏的热度应该比客户端多线程更高
@Fx&std 那不能这样思考,小游戏只是部分人需要,而多线程是以后的发展方向,用et的都会想要了解
熊猫-需要课程请私聊,其它请论坛提问 2023/6/19 16:34:55
8完全是另外一种开发模式了,跟erlang一样,完全可以通过不停的创建虚拟进程来利用多核
Fx&std 2023/6/19 16:37:23
真没必要多线程,多线程还不如多进程
开发时单进程异步够用了,上线分步式部署就可以了
熊猫-需要课程请私聊,其它请论坛提问 2023/6/19 16:40:04
@Fx&std 主要是考虑客户端
客户端有分线程的需求
服务端,et7已经可以做任何游戏了
客户端,et7遇到逻辑计算量非常大的时候,主线程压力太大
所以要支持虚拟进程,利用多核,虚拟进程之间用消息通讯。
sj 2023/6/19 16:43:36
这样拆开之后 虚拟进程间都用协议通信了吧 有没有可能再抽象一下 支持c++dll 做一个虚拟进程
熊猫-需要课程请私聊,其它请论坛提问 2023/6/19 16:44:25
@sj 这个完全没有问题,只是c#包装一下
熊猫 2023/6/19 16:49:32
小小 不要强制多线程啊啊
@小小 不会,有主线程的调度器,所有虚拟进程放在主线程跑,就是单线程了
熊猫-需要课程请私聊,其它请论坛提问 2023/6/21 0:07:27
et8多线程实现目前估计完成了50%,大部分设计已经思考的比较完整,包括热重载,热重载配置等等。只剩下编码了。et8跟之前的版本完全不同。99%的项目用et7就够用了。
等et8我这边搞完,我就会开源,因为是超级大改动,所以需要大家当小白鼠,验证很久才会发布正式版。
crash 2023/6/21 0:18:27
怎么就多线程了
熊猫-需要课程请私聊,其它请论坛提问 2023/6/21 0:19:18
因为有些场景需要多线程
比如网络要单独的线程,逻辑层跟表现层要分线程
熊猫-需要课程请私聊,其它请论坛提问 2023/6/21 0:25:59
服务端配置文件可以共享,减少内存占用等等。缺点也是有的,虽然我已经抽象了虚拟进程,大家基本上还是写单线程逻辑,遵守规则就没事,但是还是怕新人乱搞,有一定风险。
熊猫-需要课程请私聊,其它请论坛提问 2023/6/21 0:35:07
crash
服务端也需要表现层吗
@crash 服务端不需要,但是服务端可以共享配置,减少内存占用
protobuf更换memorypack
熊猫-接咨询定制等业务,有需要请私聊 2023/5/16 11:50:30
是的,我用了memorypack,性能非常好,而且兼容Unity,还能做到无gc
替换不大,主要是不能再用assemblybuild了
这样无法在Unity中编译dll , 我直接改成在IDE中编译dll了
另外excel配置文件,我干脆直接用bson了
所以et8中整个protobuf都删掉了
熊猫 2023/5/28 20:53:03
assemblybuild不会生成source generater
据说unity2023直接去掉了assemblybuilder
所以干脆就用ide编译dll了
但是ide分成model hotfix进行加载会报错,问题还是没找到,所以只能做成一个dll进行热更
感兴趣的兄弟可以研究一下
sj 2023/5/31 23:21:52
sg不是问题了 主要是Assembly builder 在2023会弃用
source generate
另外的重大改变就是sj正在做的,用source generate来生成各种system messagehandler event等等,我们只需要写个静态方法,方法上加标签,然后直接给你生成对应的class 以后大家在hotfix中全是静态方法了
网络相关
映松 2022/12/5 10:42:40
当时我们就用的kcp,然后国内许多使用vpn的玩家,发现根本连不上游戏.
现在新项目老板想让我换回TCP,方便vpn的玩家,我就头疼了,et5升et7还是不能用软路由
小虾米-尊贵299VⅡP 2022/12/5 10:44:19
vpn无法使用kcp这个确认嘛,
映松 2022/12/5 10:44:57
准确说是很多vpn不支持udp
映松 2022/12/5 10:45:08
加速器也一样
土豆相公 2022/12/5 10:45:24
但用udp的游戏应该蛮多的吧
小男 2022/12/5 10:48:00
用Nginx的反向代理网关都能解决
映松 2022/12/5 10:51:03
这个在海外测试时,许多国内玩家是这么反馈的,并且我们公司自己测试也一样,部分VPN节点可以连,部分vpn节点就不行.
目前正在找解决方案, 而且也不可能让手机玩家去换vpn或者改配置解决,只能我们自己游戏这边解决
熊猫 2022/12/5 10:53:18
应该都是小问题,不能连要找到原因,原因有无数种
是一个udp包都收不到还是链接过程中代码报错
银河 2022/12/5 10:53:58
我在考虑使用kcptun加速不使用kcp,这样可以无缝切换
大胃王 2022/12/5 10:54:02
国内连国外因为长城的原因不稳定
熊猫 2022/12/5 10:54:08
这是两种完全不一样的情况
那就支持两种协议吧。kcp跟udp是可以用同一个端口的
kcp跟tcp
我想想,让软路由支持tcp。用tcp协议把一个个kcp包发给软路由。
海 2022/12/5 11:02:32
让软路由支持tcp。用tcp协议把一个个kcp包发给软路由。必须的
CSCrap 2022/12/5 11:02:47
做个多个转发,解包,包多一层
熊猫 2022/12/5 11:03:21
这个可以试试,目前软路由跟客户端之间是udp。同时支持tcp很简单
而且这个tcp不用保持状态,随时断开重新连接,都不会丢失游戏连接
很香,解决了你们vpn的问题
这个客户端tcp跟传统的作用不一样,只是为了传送kcp的包,所以可以随时断开,随时连接。
CSCrap 2022/12/5 11:10:51
tcp断了,应该重新拉起tcp就可以,tcp方面只负责发送,不负责内容的校验,这里的tcp只是kcp的扩展
熊猫 2022/12/5 11:11:01
是的
ET-yyds 2022/12/5 11:12:44
支持http转发不,小游戏只支持websocket和http
熊猫 2022/12/5 11:12:52
@ET-yyds 也可以
websocket也可以
这tm真是个好想法,等我有时间写一下。外面用任何协议都没问题了
不过小游戏还是不行,因为小游戏没法用kcp,除非接一层c#的kcp进去
不过小游戏可以用cdn套websocket
小虾米-尊贵299VⅡP 2022/12/5 11:17:46
@熊猫 高频同步会不会有性能和延迟问题
熊猫 2022/12/5 11:18:07
@小虾米-尊贵299VⅡP tcp应该影响不大
因为tcp也不会经常断开
tcp断了,就重新选个路由,又连接上了
小虾米-尊贵299VⅡP
赶紧先弄昨天说的那个客户端tcp-软路由方案吧,这个是正事儿
熊猫 2022/12/6 15:36:27
@小虾米-尊贵299VⅡP 已经新建目录
熊猫 2022/12/6 18:51:58
想了一下kcp底层用udp跟tcp两种协议的设计,抽象一个kcpconnector基类出来,实现kcpudpconnector跟kcptcpconnector。kcptcpconnector底层用tservice实现即可。设计模式中的策略模式。
熊猫 2022/12/6 18:53:48
8还早的很呢,估计要半年以上