06-ET框架的前后端通信2

TIPS:
本系列贴仅用于博主学习ET框架的记录



前言

这篇文章记录ET框架的第二种前后端通信:IMessage


一、IMessage是什么?

在ET框架中的前后端通信的IMessage类型的通信是不需要回复的一种消息请求方式。
例如某个玩家率先到达了某个等级的阈值,之后Server对客户端下发一个消息,说:您率先到达90级。这种不需要响应的消息就用IMessage来做。(应该可以这么理解)

二、使用步骤

1.编写proto消息体

在OuterMessage.proto文件中编写代码:

message C2S_TestMessage // IMessage
{
	string HelloByClient = 1;
}
message S2C_TestMessage // IMessage
{
	string HelloByServer = 1;
}

代码命名规为:
C2S:代表是从Client to Server的一条消息,后面接着//IMessage则表明是一条普通消息,不需要回复。同理S2C也是一个道理。

C2S_TestMessage:这是从客户端发送一条消息给服务器的一条消息。

S2C_TestMessage:这是从服务器主动下推一条消息给客户端。

自定义的值则从1开始,但不能重复。最后保存文件回到Proto文件下双击bat文件会在代码里生成对应的代码。

2.编写C#代码

(1)找到LoginHelper.cs文件下的Login方法开始编写,先注释掉原先的代码:

代码如下(示例):LoginHelper

using System;


namespace ET
{
    public static class LoginHelper
    {
        public static async ETTask Login(Scene zoneScene, string address, string account, string password)
        {
            Session session = null;//定义一个与服务器端所链接的session;用于通信
            try
            {
                session = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(address));
                //客户端发送一条普通消息给服务器
                session.Send(new C2S_TestMessage() { HelloByClient = "Hello server, i am client" });
                //这里消息发送完之后如果不等待一下,session就会立马断开,
                //这样客户端就收不到服务器端主动下推的一条消息了,
                //所以为了测试这里等待一秒后才断开session
                await TimerComponent.Instance.WaitAsync(1000);
            }
            catch (Exception e)
            {
                session?.Dispose();//销毁session断开链接
                Console.WriteLine(e);
                throw;
            }
            finally
            {
                session?.Dispose();
            }

            await ETTask.CompletedTask;
        }
    }
}

(2)编写处理消息的类,在Server/Server.Hotfix/Demo下创建一个Test文件夹,并且新建一个C2S_TestMessageHandler.cs类。用来说明该类是处理C2S_TestMessage的消息的。

代码如下(示例):C2S_TestMessageHandler

namespace ET
{
    public class C2S_TestMessageHandler: AMHandler<C2S_TestMessage>
    {
        protected override void Run(Session session, C2S_TestMessage message)
        {
            Log.Debug(message.HelloByClient);//输出客户端发送过来的消息
            
            //这时候在这里主动推送一条消息给客户端
            session.Send(new S2C_TestMessage() { HelloByServer = "恭喜你率先达到封印等级--------3天后等级封印突破!!!" });
        }
    }
}

由于这是一条普通消息,没有RpcId,所以继承的是AMHandler,而不是AMRpcHandler。类型是所处理的消息类。

(3)这时候服务器下推一条消息给客户端,客户端也要编写对应的消息处理类。在Client/Unity.Hotfix/Codes/Hotfix/Demo文件夹下创建一个Test文件夹,之后在Test文件夹下创建一个S2C_TestMessageHandler.cs类。用来说明该类是处理S2C_TestMessage的消息的。

代码如下(示例):S2C_TestMessageHandler

namespace ET
{
    public class S2C_TestMessageHandler: AMHandler<S2C_TestMessage>
    {
        protected override void Run(Session session, S2C_TestMessage message)
        {
            Log.Debug(message.HelloByServer);//输出服务器下推的一条消息。
        }
    }
}

3.运行结果

保存代码重新编译一下代码,通过后运行服务器端,并且回到Unity编辑器按下F5等待编译完成后运行游戏,点击登录按钮即可发送消息。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这时候当点击登录按钮的时候就会发送消息给服务器端,同时也将收到服务器端下推的一条普通消息,一条是client发给server的,一条是server下推给client的,同时输出了服务器端下推的消息,而客户端发送的消息则要到ET文件夹下的Logs文件夹中查看Debug日志。

在这里插入图片描述


总结

简单学习一下ET前后端的通信的使用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity ET框架是一套双端框架,可以同时支持前端和后端开发。它提供了一些特色功能,比如ET版本的ECS和异步模块,以及双端网络模块。使用ET框架可以提高双端开发的效率,因为前后端的代码可以共享。然而,需要注意的是,ET框架限制了后端只能使用C#开发语言。此外,ET框架的功能并不是非常完整和精细,特别是前端的框架部分,可能只能作为一个建议的demo使用,无法满足商业项目的需求。\[1\] 相比之下,GF框架是一套比较成熟、完整的游戏框架,适用于任何游戏引擎。GF框架提供了几乎所有在Unity开发游戏中可能用到的模块,结构清晰、耦合度低。然而,由于GF框架的完整性,学习成本可能会比较高,需要一定的适应时间。\[2\] 总的来说,ET框架更适合有经验的小团队或个人游戏开发者,尤其是那些熟悉C#语言的开发者。而GF框架则更适合需要一个完整、成熟的游戏框架的开发团队。选择哪个框架取决于团队的需求和开发经验。 #### 引用[.reference_title] - *1* *2* *3* [Unity 游戏框架之GameFramework和ET对比](https://blog.csdn.net/qq563129582/article/details/106993157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值