{"repo":"Bian-Sh/TinyRPC","free":true,"listed":false,"github":"https://github.com/Bian-Sh/TinyRPC","clone":"git clone https://github.com/Bian-Sh/TinyRPC.git","description":"为 Unity 准备的使用 TCP + JsonUtility + Task 实现的极简的现代网络框架，支持 RPC 和常规消息收发。使用 upm 管理，对项目文件 0 侵入；A minimalistic modern networking framework prepared for Unity using TCP, JsonUtility, and Task to implement support for RPC and regular message sending/receiving. Managed via UPM with zero intrusion into the project files.","language":"C#","stars":141,"topics":["rpc","et","tcp","tinyrpc","unity","tinyrpc-net","codegen"],"license":null,"category":"game-templates","readme_excerpt":"本说明有配图，请确保你的网络畅通，图文模式下阅读更佳。 English TinyRPC TinyRPC 是一个为 Unity 引擎准备的，没有第三方插件依赖、仅使用 TCP + JsonUtility + Task实现的极简 RPC 网络框架，支持 RPC/常规 消息分发。它的目标是提供一个轻量级、易于使用的网络通信解决方案。 这个网络框架很多地方学习、参考了 ET ，在此表示感谢。 基于 TinyRPC 的示例项目 ：unity-drones-multiplayer-tinyrpc 图片借用 unity-drones-multiplayer的配图, 图示内容不代表最终效果！ 特性 支持局域网网络发现，提供了一个简单的测试用例，自动发现并连接到局域网内的服务器。 支持 async await 异步逻辑同步写的语法糖，让你的代码更加简洁优雅且易读。 支持客户端和服务器互发 RPC 请求。 支持常规网络消息的收发 支持基于 TCP 建立连接之上的网络通信，完整的生命周期管理，断线即刻感知。 2 种消息处理的注册方案：监听模式 、Attribute 标注模式 功能 消息的发送 使用 Send(message) 发送普通网络消息 使用 var response = await Call(request) 发送 RPC 请求并等待响应 观察者模式注册的消息处理器 使用 UnityEngine.Component.AddNetworkSignal () 注册一个普通的网络处理器 使用 UnityEngine.Component.AddNetworkSignal () 注册一个 RPC 处理器 通过反射自动注册消息处理器 使用 [MessageHandlerProviderAttribute] 标记一个消息处理器容器（类型） 使用 [MessageHandlerAttribute(MessageType.Normal)] 标记一个消息处理器 使用 [MessageHandlerAttribute(MessageType.RPC)] 标记一个 RPC 消息处理器 消息类一键生成 使用基于 proto3 精简版语法的 .proto 文件，可以一键生成消息类。如果存在多个 .proto 文件则会将消息生成在以 .proto 文件名命名的文件夹中。 支持将生成的消息存在 Assets、Project 同级以及 Packages 文件夹中。他们的优越性在于生成在 Packages 文件夹中不会对用户工程目录有任何侵入性；存在 Project 同级目录将最大化的实现消息文件在多个工程中的复用（本项目架构情形）。 运行时参数配置界面 提供了一个可以编辑器下修改、运行时生效的配置界面，可以配置日志过滤器；心跳间隔和重试次数；同时也会自动记录消息处理器所在的程序集信息 RPC 原理 TinyRPC 使用 System.Threading.Tasks 命名空间下的 TaskCompletionSource 来实现 RPC 的异步等待。 使用 System.Threading.Tasks 命名空间下的 CancellationTokenSource.CancelAfter(delay) 来实现 RPC 的超时控制。 使用对 UnityEngine.Component 新增扩展方法的方式实现在 MonoBehaviour 实例中像使用本地函数一样注册消息处理器 使用 System.Reflection 命名空间下的 MethodInfo 配合 Delegate.CreateDeleg","default_branch":null,"files":null,"tree":[],"storefront":"/r/Bian-Sh","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Bian-Sh/TinyRPC/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}