我正在尝试用Java制作在线MMO。这将是一个简单的,你可以获得一个角色,并可以四处移动并拍摄其他玩家,所有这些都是自上而下的2D。服务器将是多线程的并且使用Java,客户端也将使用Java。客户端将所有用户输入发送到服务器,服务器将处理所有逻辑(玩家,敌人等的移动......)并将位置发送回客户端。无论如何,最好的方法是获取有关所有敌人和玩家的位置的所有信息给客户?最好的方法是将所有数据放入一个对象并序列化并将其写入套接字,并在客户端进行反序列化吗?
答案 0 :(得分:4)
通常,您可以通过两种方式发送更新:
在服务器上序列化数据并将其发送到客户端很好,但只发送您需要的数据,并且不要使用超出必要的更大数据类型。在将来,您可能需要考虑第三方序列化库,这些库可能性能更高或者表示更紧凑,但现在您已经离开了这一点。当您发送的对象以某种方式更改格式时,您还必须考虑要做什么;会破坏老客户吗?
服务器的主要工作之一是确保您只将消息发送给真正需要它们的人;这通常通过至少进行距离检查来完成。您还可以查看是否有需要发送的内容;如果一个实体自上次以来没有移动过,则无需再次广播其位置。
客户端到服务器是另一回事:如果您盲目地反序列化您发送的对象,那么黑客可能会让您感到痛苦。从一开始就规划安全性。让客户向您发送易于检查和验证的简单数据,并丢弃任何可疑的信息。