6

我有具有相应客户端对象的服务器对象。要保持同步的数据位于服务器对象的键/值字典中。为了使客户端对象与服务器对象保持同步,我希望服务器在每个对象的每一帧都发送键/值字典。

什么数据结构/算法将允许我使用最少的位发送键/值字典列表?

额外约束 1:对于每种类型的对象,某些键的值比其他键的值更频繁地更改。奖励约束 2:服务器端的内存使用相对昂贵。

4

2 回答 2

4

您不需要发送整个字典。相反,只发送更改的内容。

您不需要每帧都发送它。相反,定期发送它与帧速率无关。

第二点要记住的一个重要思想是客户端可以预测游戏状态的变化——游戏可以在从服务器接收信息之间继续进行模拟,然后只需要在收到权威信息后纠正错误再次从服务器。

于 2012-10-22T11:17:05.017 回答
0

没有特殊的数据结构或算法。传输分隔数据就足够了。

示例数据(作为 C 字符串,注意“\\”实际上是“\”):key1;value1;key2;value2;key3\\;with delimiter inside it;value3;\0

您可以选择要发送的密钥,它易于读取*和写入**,占用很少的内存,甚至可以压缩(因为它只是一个字节流)。

*-读:

while( peekbyte() != 0 )
{
    key = readuntil( ';' ); // checks if previous byte isn't "\" while looking for char.
    value = readuntil( ';' );
    add( key, value );
}

**-写:

foreach( key in keylist )
{
    write( replace( ';', '\\;', key ) );
    write( replace( ';', '\\;', dict[ key ] ) );
}
write( '\0' );
于 2012-10-22T11:35:59.790 回答