gpt4 book ai didi

C# - 通过网络序列化数据包

转载 作者:可可西里 更新时间:2023-11-01 02:47:32 30 4
gpt4 key购买 nike

我正在开发一个发送大量数据包的网络应用程序。目前,我的序列化方法只是一个 hack,它获取一个对象列表并将它们转换为由竖线字符“|”分隔的字符串并将其刷新到网络流中(或仅通过 UDP 将其发送出去)。

I am looking for a cleaner solution to this in C# while minimizing packet size (so no huge XML serialization).

我对 BinaryFormatter 的体验很慢。我还考虑通过将数据包编码为 base64 字符串并在客户端对其进行解码来压缩数据包。我希望了解这将如何影响我的应用程序的性能。

另外,还有一个简单的问题:

我的设置创建了 2 个套接字(一个 TCP 和 UDP),客户端分别连接到这两个套接字。数据根据需要被刷新(TCP 用于重要的东西,UDP 用于不重要的东西)。这是我第一次同时使用 TCP/UDP 并且想知道

if there is a more unified method, although it does not seem so.

一如既往地感谢您的大力支持。

最佳答案

我会使用类似于 Google's Protocol Buffers 的二进制协议(protocol).使用 John Skeet 的 protobuf-csharp-port可以分别在 IMessage 和 IBuilder 上使用 WriteDelimitedTo 和 MergeDelimitedFrom 方法。这些将在消息前加上字节数,以便它们可以在另一端使用。定义消息非常简单:

message MyMessage {
required int32 number = 1;
}

然后使用 ProtoGen.exe 构建 C# 类然后去城里。 protobuffers(特别是 protobuf-csharp-port)的一大好处是不是每个端点都需要同时升级。以前的版本可以无误地添加和使用新字段。这种版本独立性可能非常强大,但如果您不打算这样做,也会对您不利 ;)

关于C# - 通过网络序列化数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567059/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com