0

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

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

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

4

2 回答 2

0

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

于 2012-05-23T22:57:45.090 回答
0

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

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

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

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

它就像一个魅力。

于 2012-05-24T05:03:12.333 回答