识别占用空间较小的属性名称

Vau*_*lts 11 c# networking overhead

我希望发送数据包来同步游戏中不断变化的游戏对象的属性.我已经将服务器端属性发生变化的通知发送给负责发送客户端更新消息的EntitySync对象.

现在,我正在预先修复属性字符串名称.当您发送大量更新(位置,HP,角度)时,这是一个很大的开销.我想要一种半独特的方式来篡改这些数据包.

我考虑过属性(反射......慢?),在末尾使用后缀并将其作为ID(Position_A,HP_A)发送,但是我却不知道用低脚快速识别这些属性的干净方法打印.它应该消耗尽可能少的字节.

想法?

Ale*_*ius 7

扩展查理的解释,

由Marc Gravell制作的protobuf-net库正是您在序列化方面所寻求的.澄清一下,这是Marc Gravell的图书馆,而不是谷歌.它使用谷歌的协议缓冲编码.它是最小的脚印序列之一,实际上它可能会生成比手动序列化更小的数据包(默认Unity3D如何处理网络,yuck).

至于速度,Marc使用了一些非常聪明的技巧(即超级描述符)http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces ,但除去了运行时反射的开销.

关于网络抽象的思考; 看看Rx http://msdn.microsoft.com/en-us/data/gg577609.aspx事件流是迄今为止处理网络和多线程子系统内通信的最优雅方式:

// Sending an object:
m_eventStream.Push(objectInstance);

// 'handling' an object when it arrives:
m_eventStream.Of(typeof(MyClass))
.Subscribe ( obj =>
{
    MyClass thisInstance = (MyClass) obj;
    // Code here will be run when a packet arrives and is deserialized
});
Run Code Online (Sandbox Code Playgroud)