千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  Unity技术干货  >  正文

xlua-framework之网络框架

来源:千锋教育
作者:wjy
关键词: 广州 成都
2022-09-28
分享

  前言

  一般我们说到网络框架,主要是指Socket网络框架,如果是Http的话,我们没有必要单独介绍了,简单用可以直接使用WWW或者UnityWebRequest,如果稍微复杂的使用,可以使用RestSharp库。所以我们本章主要讨论的是xlua-framework框架是如何实现socket网络框架的。

  虽然lua自带的有socket库,但是luasocket其实更适合写命令行工具。游戏里直接用为Lua写的网络库其实不多,大多数是从C++、C#封装一个自己的库,然后在lua中调用。当然也有luasocket实现的服务端网络框架,skynet主要是为服务器设计的,不太容易用到客户端里,毕竟主要是服务器监听+多线程。所以xlua-framework也是这么做的,在C#端实现了一套Socket的链接,然后lua端进行监听和调用。

  网络管理器

  其实C#端的网络实现,大多数框架都大同小异,无非就是使用C#系统自带的Socket套接字,然后封装连接,封装收发消息等,我们就不再详细解释了,大致的代码结构如下所示:

xlua-framework之网络框架1

  DoReceive方法中,我们需要处理下数据的接受,ReceivePkgHandle函数,绑定的是Lua中的数据接受function

xlua-framework之网络框架2

  lua端网络连接器

  lua端的连接器,实际上只是对C#端管理器的一个包装,基本结构如下所示

xlua-framework之网络框架3

  网络消息发送

  网络消息的发送,我们来定义多个xxxxRequest类,专门用于不同的场景发送网络消息,比如:LoginRequest,登录时用的消息发送,GameRequest,游戏对战中用的消息发送,示例代码入下

xlua-framework之网络框架4

  当用户点击登录按钮的时候,我们调用ReqLogin函数即可。

  网络消息接受

  网络消息的接受,我们采用分发的机制来处理,C#端传递过来的网络消息,我们统一在HallConnector.OnReceive中接受,不同的消息有不同的消息id,我们根据不同的消息id,把消息分发到各个不同的消息接收器中,比如:LoginHandler:登录消息接收器,GameHandler:游戏对战消息接收器。

  如何绑定消息

xlua-framework之网络框架5

  如何分发消息

xlua-framework之网络框架6

  lua-protobuf

  首先注意,

  原框架 xlua-framework 中,使用的protobuf-gen-lua,

  而 xlua-framework-unity2018 中升级为了lua-protobuf,

  两者有什么区别呢?

  protoc-gen-lua:会给每一个.proto文件生成一个巨大的.lua协议描述文件,使用起来也需要找到对应的lua协议表名,先new,然后再序列化为字符串local msg = login:SerializeToString()。用起来没有pbc简洁,和pbc一样都不再维护了,且都不支持最新的lua和protobuf版本,

  lua-protobuf:这个是我推荐使用,并且目前也在使用的版本,使用方法和pbc基本一样,生成pb二进制描述文件,然后引入后就直接使用,解析原理虽然和pbc不一样,但是使用起来完全一样,主要是一致在维护更新,支持最新的lua和protobuf,并且效率也很高,数据解析也是多层的普通表,pbc是代理表,惰性解析。目前xlua作者也推荐使用lua-protobuf,pbc也支持,

  可以参考我的这篇文章:xlua接入protobuf

  生成pb文件

xlua-framework之网络框架7

  其实我们双击make_proto.bat就可以导出.pb文件了,但是导出目录就在这个文件夹,不在工程内,所我们在unity编辑器又写了一个执行并拷贝的工具,我们直接点击proto gen lua 按钮就可以了,.pb文件会自动拷贝到LuaScript/Net/Proto目录,然后游戏可以直接运行,自动加载的就是最新的pb文件

  加载pb文件

xlua-framework之网络框架8

  解析pb文件

xlua-framework之网络框架9

  注意,我们再OnReceive的时候,已经按照msg_id解析过结构体了,所以我们再Handler分发消息处理器中,实际上是拿到的直接就是可以使用的table数据了

xlua-framework之网络框架10

  结束

  好了,以上就是我们的xluaframework的网络框架简介,希望对你有所帮助

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • unity如何接入puerts webpack适用于我们执行ts编译为js用的插件,把需要的依赖加入到dependencies标签中,然后在vscode的终端输入npm install 拉取依赖即可,拉取成功后,会生成一-个node_ modules的文件夹,里面就是我们拉取的依赖库,可能很大,这个文件夹最好加入到忽略列表中。代码如下所示:
  • xlua-framework之UI框架 我们前面说过xlua-framework这个框架,是一个纯lua的一个框架,也就是说我们所有的逻辑都可以在lua中实现,只有资源模块和网络模块是c#原生写的,但是也在lua中给我们包装的工具类,让我们更方便的使用。在框架的纯lua代码中,不得不说,ui框架是我最喜欢的,一套基于mvc的一套ui框架。
  • xlua-framework之网络框架 一般我们说到网络框架,主要是指Socket网络框架,如果是Http的话,我们没有必要单独介绍了,简单用可以直接使用WWW或者UnityWebRequest,如果稍微复杂的使用,可以使用RestSharp库。所以我们本章主要讨论的是xlua-framework框架是如何实现socket网络框架的。
  • Unity-TextMeshPro如何扩展材质实现字体Face+Outline流光效果 TexeMeshPro 是Unity的一个Text文本插件,实现了比UGUI的Text,更好看的效果,跟高效的性能,所以深受大家的喜欢,但是再好的插件,也不是万能的,比如我们的策划有个新需求,要我们的VIP的名字比普通玩家有更好看的效果
  • Unity如何接入Firebase Cloud Message远程推送 本地推送:玩家打开游戏后,给手机系统通知设置推送的倒计时,等游戏关闭后,倒计时结束时,手机会自动打开通知给用户。由于是提前设定死的内容和计时器,所以灵活性差。 远程通知:有一个服务器后台,可以随时随地给玩家发送通知提醒。好处是灵活,但是坏处就是无法根据用户的进度,定制推送内容。所有用户一把抓,走统一逻辑推送。
  • Unity如何实现一个弹框队列管理PopManager 最近游戏中加的弹窗页面有点多,导致快上线时,频繁出现弹窗的问题,不是冲突了,就是出不来,所以我想从根源上解决这个问题。 解决弹窗的问题,需要把握好3点