我需要通过网络(多人游戏)传输 .NET 对象(具有层次结构)。为了节省带宽,我只想传输发生变化的字段(和/或属性),因此不会传输不会发生变化的字段。
我还需要一些机制来匹配另一客户端的适当对象(全局对象标识符...类似于对象 ID?)
我需要一些建议如何去做。
你会使用反射吗? (性能很关键)
我还需要传输 IList 增量(添加对象、删除对象)的机制。
MMO 网络是如何完成的,它们会传输整个对象吗?
(也许我的每场转移的想法是愚蠢的)
编辑:
明确地说:我已经有了跟踪更改的机制(假设每个字段都有属性,setter 将字段添加到某种列表或字典中,其中包含更改 - 结构现在不是最终的)。
我不知道如何序列化这个列表,然后在其他客户端反序列化它。主要是如何有效地做到这一点以及如何更新适当的对象。
大约有一百个对象,所以我尽量避免为每个对象编写特殊函数的情况。用属性装饰字段或属性是可以的(例如指定序列化器、字段 ID 或类似的东西)。
关于对象的更多信息:每个对象平均有 5 个字段。一些对象是从其他对象继承的。
谢谢大家的回答。
最佳答案
另一种方法;不要尝试序列化复杂的数据更改:相反,只发送要应用的实际命令(以简洁的形式),例如:
move 12432 134, 146
remove 25727
(这将移动 1 个对象并移除另一个对象)。
然后您将在接收器上应用命令,如果它们不同步则允许完全重新同步。
我不建议您为此实际使用文本 - 这只是为了让示例更清晰。
一个好处是:它还免费提供“重播”功能。
关于c# - 通过网络在每个字段的基础上传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376868/