首先,我将解释我的网络模型:
我的游戏中的网络由远程服务器和客户端上的配对对象组成。做一个简短的描述,假设服务器世界中有多个字符需要与客户端同步(我会考虑只考虑一个以简化事情)
每次在服务器端创建一个角色时,服务器都会实例化一个 ServerRpgCharacter - 这个类包装了 RpgCharacter 并注册了观察者等来监视角色并向角色广播相关的突变。然后,服务器为 ServerRpgCharacter 请求一个 pair 对象(即,它请求客户端为此对象实例化一个与它通信的 pair。)该 pair 可以是任何类,但是远程端由 ServerRpgCharacter 分派的任何消息都将是由其各自对在客户端接收。
它更多地涉及多个客户,但最终效果很好。
无论如何,我一直在想多种方法来优化这个模型。它现在的工作方式是,当一个对象向它的配对发送消息时,它会排队进入“快照”。每当任何配对实体发送消息时,它都会被扔到同一个快照中。然后以 200 毫秒的间隔压缩和分派快照。
问题是我使用 TCP/IP 协议来传输这些快照。我不确定 TCP 协议究竟是如何工作的,但我假设如果快照的数据包被丢弃,则必须重新发送整个快照。
因此,我想知道如果我丢弃 TCP 而是在 UDP 之上实现一个自定义层,而不是为所有对发送的所有消息调度一个完整的快照,我有它是否会更优化,以便这些单独的对维护自己的数据包排序和缓冲。这样,如果对 A 的数据包被丢弃,对 B 可以忽略对 A 有一个数据包丢弃的事实。
然后我需要考虑压缩这些数据的效率较低,因为传输的数据较少。