【发布时间】:2012-05-23 22:20:09
【问题描述】:
所以我有基本的 UDP 服务器,我已经实现了一些东西,比如完全恢复字节数组是如何由客户端发送的(如果它被无序检索)。基本上,我有客户端、服务器和具有类型的共享类库,其对象可以从客户端发送到服务器,反之亦然。所以现在我想到了序列化一些对象并发送到服务器/客户端的想法。但我需要知道收到了什么类型的对象才能正确反序列化它。想到了两个想法来解决这个问题:
- 进行“握手”。发送有关将要发送的对象、其长度、类名等的数据。在它检索实际数据并对其进行反序列化之后。我知道这样做,但是由于它是 UDP,所以这个“握手”可能会丢失,我需要重新请求它,所以逻辑和网络过度使用非常复杂,但我知道如何实现。
- 第二个是通过一些哈希值来识别类型。所以客户端发送包含类型哈希值和数据片段的数据(我只会发送我自己的类型的对象,所以不需要为 C# 和框架类型实现这个),我需要通过这个哈希值来确定类型,服务器可以适当地去实现它。
那么有什么想法,如何实现呢?如果我设法避免反射,那将是完美的,因为它很慢(如果它工作得更快,我不在乎巨大的 switch 语句)
【问题讨论】:
-
我假设您有自己的协议,因为您通过 UDP 发送字节。所以我会说有一两个保留字节,您可以使用它来确定您正在发送/接收的对象类型。这取决于你。
-
不,现在只是标准binary serialization
-
这个想法仍然存在:你可以在对象之前发送一个序列化的类型来表示即将到来的内容
标签: c# serialization hash udp client-server