Unity3d客户端+.NET Server-推荐网络层
Unity3d client +.NET Server - recommend network layer
对于多人在线游戏,您会选择什么网络层,满足以下要求:
- 服务器使用C#开发,客户端使用C#开发
Unity3d?
- 实时双向通道(最小延迟)
- 快速、紧凑
根据我的研究,我正在寻找以下内容:
交通:
Websockets 与直接 TCP(使用 https://docs.unity3d.com/Manual/UNetUsingTransport.html)
SignalR(有任何开销吗?),gRPC(适合实时?)——两者都缺乏 Unity 客户端的官方支持。
数据协议:
- Protobuf 与平面缓冲区。 JSON 没有考虑...
有什么推荐吗?
这取决于你的游戏。基于 twitch 的快速第一人称射击游戏可能需要高度自定义的网络代码才能提供良好的游戏体验,而对于回合制游戏,任何网络解决方案都可以。
FlatBuffers 比 Protobuf 对游戏/性能更友好,但有线格式往往更大一些,并且还没有 GRPC 与 C# 集成(仅 C++ 和 Go)。
如果您的游戏是一款动作游戏,您就不能真正使用 TCP 或任何基于它的东西。 TCP 具有内置的 throttling/re-sending 机制,一旦连接表现出更多的数据包丢失,就会严重破坏您的延迟。正确制作动作游戏的唯一方法是使用 UDP。有一些库负责在 UDP 之上为您重新发送可靠数据(例如 C/C++ 的 Enet),但我不熟悉 C# 的库。
对于多人在线游戏,您会选择什么网络层,满足以下要求:
- 服务器使用C#开发,客户端使用C#开发 Unity3d?
- 实时双向通道(最小延迟)
- 快速、紧凑
根据我的研究,我正在寻找以下内容:
交通:
Websockets 与直接 TCP(使用 https://docs.unity3d.com/Manual/UNetUsingTransport.html)
SignalR(有任何开销吗?),gRPC(适合实时?)——两者都缺乏 Unity 客户端的官方支持。
数据协议:
- Protobuf 与平面缓冲区。 JSON 没有考虑...
有什么推荐吗?
这取决于你的游戏。基于 twitch 的快速第一人称射击游戏可能需要高度自定义的网络代码才能提供良好的游戏体验,而对于回合制游戏,任何网络解决方案都可以。
FlatBuffers 比 Protobuf 对游戏/性能更友好,但有线格式往往更大一些,并且还没有 GRPC 与 C# 集成(仅 C++ 和 Go)。
如果您的游戏是一款动作游戏,您就不能真正使用 TCP 或任何基于它的东西。 TCP 具有内置的 throttling/re-sending 机制,一旦连接表现出更多的数据包丢失,就会严重破坏您的延迟。正确制作动作游戏的唯一方法是使用 UDP。有一些库负责在 UDP 之上为您重新发送可靠数据(例如 C/C++ 的 Enet),但我不熟悉 C# 的库。