c# - 通过网络在每个字段的基础上传输对象

标签 c# .net networking serialization multiplayer

我需要通过网络(多人游戏)传输 .NET 对象(具有层次结构)。为了节省带宽,我只想传输发生变化的字段(和/或属性),因此不会传输不会发生变化的字段。

我还需要一些机制来匹配另一客户端的适当对象(全局对象标识符...类似于对象 ID?)

我需要一些建议如何去做。
你会使用反射吗? (性能很关键)
我还需要传输 IList 增量(添加对象、删除对象)的机制。

MMO 网络是如何完成的,它们会传输整个对象吗?
(也许我的每场转移的想法是愚蠢的)

编辑:
明确地说:我已经有了跟踪更改的机制(假设每个字段都有属性,setter 将字段添加到某种列表或字典中,其中包含更改 - 结构现在不是最终的)。

我不知道如何序列化这个列表,然后在其他客户端反序列化它。主要是如何有效地做到这一点以及如何更新适当的对象。

大约有一百个对象,所以我尽量避免为每个对象编写特殊函数的情况。用属性装饰字段或属性是可以的(例如指定序列化器、字段 ID 或类似的东西)。

关于对象的更多信息:每个对象平均有 5 个字段。一些对象是从其他对象继承的。

谢谢大家的回答。

最佳答案

另一种方法;不要尝试序列化复杂的数据更改:相反,只发送要应用的实际命令(以简洁的形式),例如:

move 12432 134, 146
remove 25727

(这将移动 1 个对象并移除另一个对象)。

然后您将在接收器上应用命令,如果它们不同步则允许完全重新同步。

我不建议您为此实际使用文本 - 这只是为了让示例更清晰。

一个好处是:它还免费提供“重播”功能。

关于c# - 通过网络在每个字段的基础上传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376868/

相关文章:

c# - WPF 删除选项卡不处理内容?

.net - .NET 上 x86/x64/ia64 内存模型之间的差异

linux - 我无法通过 HTTP POST 请求将 XML 数据从特定客户端发送到特定服务器。我该如何调试?

c# - 系统提示音是什么原因?

c# - SqLite C# 更新速度极慢

c# - 给出与 C# 相同结果的 php md5 算法

c# - 自定义 ValueInjecter 注入(inject)中的动态类型转换

c# - 接收并发异步请求并一次处理一个请求

networking - 带有FIN标志的TCP数据包也能有数据吗?

android - 以编程方式获取wifi/移动网络的数据速度