如何按哈希值识别类型

本文关键字:识别 类型 何按哈 | 更新日期: 2023-09-27 18:35:05

所以我有基本的UDP服务器,我已经实现了一些东西,比如准确地恢复字节数组由客户端发送的方式(如果它是按顺序检索的)。基本上,我有客户端,服务器和共享类库,其类型,其对象可以从客户端发送到服务器,反之亦然。所以现在我想到了序列化一些对象并发送到服务器/客户端的想法。但是我需要知道接收了什么类型的对象才能正确反序列化它。为了解决这个问题,我想到了两个想法:

  • 进行"握手"。发送有关将发送什么对象、其长度、类名等的数据。并在它检索实际数据并反序列化之后。我知道这样做,但由于它是UDP,这个"握手"可能会丢失,我需要重新询问它,所以有相当复杂的逻辑和网络过度使用,但我知道如何实现这一点。
  • 第二个是通过一些哈希值识别类型。因此,客户端发送包含类型和数据片段的哈希值的数据(我只会发送我自己类型的对象,因此无需为 C# 和框架类型实现这一点),我需要通过此哈希值确定类型,服务器可以正确实现它。

那么任何想法,如何实现呢?如果我设法避免反射,因为它很慢,那将是完美的(如果它工作得更快,我不在乎巨大的开关语句)

如何按哈希值识别类型

我今天只是为我正在研究的一个原型做了这个。我这样定义我的消息流:

前 4 个字节:作为 Int32 的程序集限定类型名称的长度。

接下来的 n 个字节

(其中 n 由前 4 个字节给出):类型的程序集限定名称。

消息的其余部分:序列化的对象

它就像一个魅力。

只需使对象类型成为对象数据的一部分,并使用完全相同的逻辑发送它们。不要尝试在网络级别单独处理它们。