我正在考虑创建一个网络游戏 该游戏应该是一个2D平台射击游戏,由Libgdx和Box2D创建 对于网络,我计划了以下结构:
view frustum
第一个问题:您如何看待这种结构?
下一个问题:每秒45次可以从服务器端上传很多数据,如果有少数玩家投射了很多子弹(玩家和子弹位置需要发送)。
为了限制所需的上传,我考虑使用view frustum culling
并仅发送客户端实际看到的数据/更新
现在我已经看到了KryoNet
方法sendToAllTCP
并且想知道,如果这种方法在某种程度上更有效并且可以某种方式仅上传数据一次,而不是每个客户端上传一次。
我不是那种有网络经验的人,我真的不认为可以为一个客户端上传一次。但我确定要问
因此,使用sendToAllTCP
发送级别的每个更新是否更有效,或者为每个客户端发送一次更有效,然后只发送他们可以看到的内容?
答案 0 :(得分:1)
KryoNet是开源的,你可以看到它在这里做了什么:https://github.com/EsotericSoftware/kryonet
sendToAllTCP
方法在这里:
https://github.com/EsotericSoftware/kryonet/blob/master/src/com/esotericsoftware/kryonet/Server.java#L447
sendToAllTCP
方法只是遍历TCP连接,并向每个连接发送相同的数据。源代码中有一条注释,它们应该只序列化一次数据,并多次发送序列化对象,但它还没有这样做。
通常,在单个发送上向多个主机发送数据的能力称为" multicast"。由于许多原因,它通常不可用,仅在高度专业化的情况下有用。见http://www.tcpipguide.com/free/t_IPMulticasting.htm
您遇到的性能问题更可能发生在互联网延迟上,而不是服务器发送数据包的原始能力上。我还不太担心优化TCP连接发送。