【TouchSocket】关于TouchSocket Unity学习笔记

关于TouchSocket Unity学习笔记

前言

真的感谢 若汝棋茗 大佬的开源分享
解决了我一名前端开发人员 写关于后端服务器相关的困扰!!!

大佬的开源项目配套及其齐全,清晰的文档+ 视频教程+ Example 示例
小白上手学习完全没有问题,拿来即用,哈哈哈。

我看全部关于 TouchSocket Unity部分的视频学习. 写篇笔记, 留后续开发备忘

笔记
  1. Unity3d Socket网络通信、RPC登录
    TouchSocket是基于Net45和.netstandard2.0的,且没有任何其他运行时,是 100%基于C#开发的,所以可以直接用于unity。
    但是由于TouchSocket全系都是基于Socket构建的,所以目前无法用于 WebGL。除此之外,支持window、android、ios、linux等平台。

    目前实测支持Il2cpp编译,支持HybridCLR热更新。

  2. 在Unity3d里面引用TouchSocket
    操作不多废话,教程非常清晰!
    【注意】
    初始导入示例package文件后,可能会报错
    会遇到插件tocken 过期失效的issue
    解决办法:重启Unity就好

    可能 若汝棋茗 大佬仓库中关于Unity Package的文件存在时效性问题
    解决办法: 根据视频中的教程需要在Nuget的官网重新替换.dll文件

  3. 在Unity3d中创建Tcp客户端与C# .Net6控制台通信
    关于Tcp 的示例演示

//服务端
 private static void StartTcpService(int port)
 {
    
    
     var service = new TcpService();
     service.Setup(new TouchSocketConfig()//载入配置
         .SetListenIPHosts(new IPHost[] {
    
     new IPHost(port) })
         .SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter())
         .ConfigurePlugins(a =>
         {
    
    
             a.Add<MyPlguin>();//此处可以添加插件
         })
         .ConfigureContainer(a =>
         {
    
    
             a.AddConsoleLogger();//添加一个日志注入
         }));
     service.Start();//启动
     service.Logger.Info($"Tcp服务器已启动,端口{
      
      port}");
 }
// 客户端
public void Connect()
{
    
    
    try
    {
    
    
        m_tcpClient.SafeDispose();
        m_tcpClient = new TcpClient();
        //声明配置
        TouchSocketConfig config = new TouchSocketConfig();
        config.ConfigureContainer(a =>
            {
    
    
                a.AddLogger(UnityLog.Logger);
            })
            .ConfigurePlugins(a =>
            {
    
    
                a.Add<MyTcpPlugin>();
            })
            .SetRemoteIPHost(new IPHost(inputField_Iphost.text))
            .SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter());

        //载入配置
        m_tcpClient.Setup(config);

        m_tcpClient.Connect();
    }
    catch (Exception ex)
    {
    
    
        UnityLog.Logger.Exception(ex);
    }
}
tcp的稳定可靠的连接特性
我觉得这个部分可以适用于游戏聊天及消息机制!
  1. 解决Tcp客户端在Unity里面粘分包的问题
    推荐引入FixedHeaderPackageAdapter
.SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter())
  1. 在Unity3d里面使用Rpc做游戏登录
    在这里插入图片描述
    文件传输
    消息机制
    友好的代理机制
    我觉得可以用于游戏的热更新、ab包加载、服务端Api设计及其他方法响应
    扩展学习视频地址
  2. 优化Unity3d使用Rpc的体验、生成代理调用

后期更新原因更名TouchRpcDmtp,使用方式大差不差,但功能更为强大

//方式一:客户端代理配置
	string codes = service.RpcStore.GetProxyCodes("命名空间");
	File.WriteAllText("文件路径",codes);

//方式二:加入Rpc代理插件
	//服务端
	.ConfigurePlugins(a =>
	{
    
    
	    a.UseDmtpRpc();
	
	    a.Add<MyTcpRpcPlguin>();
	})
	//客户端Plugins 窗口配置
代理获取的多种方式:
	本地配置
	远程配置
		url链接下载
		Rpc代理插件
  1. 优化Unity3d的Rpc调用配置
InvokeOption invokeOption =new InvokeOption();
设置消息的反馈类型

在这里插入图片描述
重置ID
相关已经被优化了
[DmtpRpc(true)]

  1. Unity3d Udp通信、UdpRpc登录
    类似Tcp使用,非可靠通信,适用于广播机制及视频流等

    TouchSocket 加入了允许超过64k的udp消息通信算法
    设置其适配器为UdpPackageAdapter类型即可


最近在花时间,测试Demo及跑通文档教程中的各个 通讯方法功能点

为后期实际搭建项目做准备

目前遇到的问题
Dmtp 在Unity中连接通讯时跑不通
询问大佬本人回复:需要注意Dll版本
解决办法:跟着这个思路,去到nuget 官网 搜到 dll文件,手动替换掉就好了

后期具体花时间测试Dmtp的

  1. 远程方法api调用
  2. 大文件传输
  3. 数据库连接访问
  4. xml及Json等
    测试完后,我再将我的测试Demo 放github上去