使用序列化通过套接字而不是字符串发送对象

Using serialization to send objects over sockets instead of strings

我正在用 C# 制作一款游戏,它使用套接字在玩家之间传输数据,包括三个用于位置的浮点数和一个用于旋转的浮点数。目前我正在使用编码为二进制的字符串来执行此操作,我知道这是非常低效的,并且可能会导致服务器上有 5 个玩家每秒更新 32 次时出现问题,尤其是由于必须从浮点数转换为字符串并返回并拆分字符串。我认为序列化可能很好,因为(我假设)它的 space 效率和速度。不过,我仍然不确定一些事情:

  1. space 效率更高吗?
  2. 序列化比转换为字符串更快吗?
  3. 如何分离对象? (我使用“”来了解每次更新以字符串结束的位置)
  4. 序列化是个好主意吗?
  5. 还有其他推荐的替代品吗

我不会使用二进制序列化程序,因为正如概述的那样here它是一个巨大的安全漏洞

这是一个很大的话题。您可以使用众所周知的序列化库、通信框架或构建您自己的。看看 Message pack, Protocol buffers gRPC and so on for libraries and frameworks. If you want to build it all yourself I'd recommend using fixed frames. Have a look at Stephen Cleary's blog entry about Message Framing as well as the new IO Pipelines 也特别是如果你想自己构建一个终止符分隔的协议。