0

首先,我将解释我的网络模型:

我的游戏中的网络由远程服务器和客户端上的配对对象组成。做一个简短的描述,假设服务器世界中有多个字符需要与客户端同步(我会考虑只考虑一个以简化事情)

每次在服务器端创建一个角色时,服务器都会实例化一个 ServerRpgCharacter - 这个类包装了 RpgCharacter 并注册了观察者等来监视角色并向角色广播相关的突变。然后,服务器为 ServerRpgCharacter 请求一个 pair 对象(即,它请求客户端为此对象实例化一个与它通信的 pair。)该 pair 可以是任何类,但是远程端由 ServerRpgCharacter 分派的任何消息都将是由其各自对在客户端接收。

它更多地涉及多个客户,但最终效果很好。

无论如何,我一直在想多种方法来优化这个模型。它现在的工作方式是,当一个对象向它的配对发送消息时,它会排队进入“快照”。每当任何配对实体发送消息时,它都会被扔到同一个快照中。然后以 200 毫秒的间隔压缩和分派快照。

问题是我使用 TCP/IP 协议来传输这些快照。我不确定 TCP 协议究竟是如何工作的,但我假设如果快照的数据包被丢弃,则必须重新发送整个快照。

因此,我想知道如果我丢弃 TCP 而是在 UDP 之上实现一个自定义层,而不是为所有对发送的所有消息调度一个完整的快照,我有它是否会更优化,以便这些单独的对维护自己的数据包排序和缓冲。这样,如果对 A 的数据包被丢弃,对 B 可以忽略对 A 有一个数据包丢弃的事实。

然后我需要考虑压缩这些数据的效率较低,因为传输的数据较少。

4

1 回答 1

1

使用 TCP 压缩更有效,因为您可以使用整个流的上下文进行压缩。你不能用 UDP 做到这一点,因为你必须单独压缩每个数据包。

UDP 的好处是您可以丢弃数据包而不重新发送它们,因为您假设以后的数据包会足够快地更新信息。

间隔需要更短,因为用户会注意到 200 毫秒。50 毫秒可能是更好的选择。

您可以使用空间查找代替正常的侦听器模式。当一个事件发生时,它对于同一级别的事物和 X 方格的距离是显而易见的。这将节省您在玩家和怪物四处移动时必须维护大量列表。

于 2013-09-14T07:23:43.617 回答