Java 为在线多人游戏构建服务器

Java 为在线多人游戏构建服务器,java,python,multithreading,sockets,udp,Java,Python,Multithreading,Sockets,Udp,我正在做一个在线多人游戏。我已经为任何持久性存储开发了登录服务器和数据库;两者都是用Python编写的,将由谷歌的应用程序引擎托管。(目前) 我比较熟悉两种语言——Java和Python。我想用其中一种语言编写实际的游戏服务器,并且我希望客户端到游戏服务器连接的延迟尽可能低,因此我假设大多数游戏数据(例如,优秀玩家的移动)都需要通过UDP连接发送。我不熟悉UDP连接,所以我真的不知道从哪里开始设计服务器 服务器应该如何线程化?每个客户端连接一个线程保留会话信息,然后一个单独的线程控制自主世界更改

我正在做一个在线多人游戏。我已经为任何持久性存储开发了登录服务器和数据库;两者都是用Python编写的,将由谷歌的应用程序引擎托管。(目前)

我比较熟悉两种语言——Java和Python。我想用其中一种语言编写实际的游戏服务器,并且我希望客户端到游戏服务器连接的延迟尽可能低,因此我假设大多数游戏数据(例如,优秀玩家的移动)都需要通过UDP连接发送。我不熟悉UDP连接,所以我真的不知道从哪里开始设计服务器

服务器应该如何线程化?每个客户端连接一个线程保留会话信息,然后一个单独的线程控制自主世界更改(NPC移动等)

相对较大的数据包应该如何传输?(例如约25名附近玩家及其所有游戏数据、用户名等)TCP或UDP

最后-游戏服务器通过HTTP请求与登录服务器连接是否安全,如何验证(从登录服务器的角度)游戏服务器的身份-简单密码、加密

我不想问这样的问题,因为我知道它们通常被标记为低效的-哪种语言对我来说(作为一个没有socketing经验的人)编写一个足够高效的服务器更好-假设两者的经验相同

最后-如果这是相关的-我还没有开始在客户端上开发-不确定我的游戏目标是什么,我只是希望服务器可以扩展(最多150名玩家,超出这个范围,我预计并理解可能需要进行重大重写),并且能够支持相当数量的玩家和开放世界风格的内容。(不需要对物理或类似的东西征税)

“我假设大部分游戏数据(例如优秀玩家 移动)将需要通过UDP连接发送。我不熟悉 使用UDP连接,所以我真的不知道从哪里开始设计 服务器。”

UDP可以降低延迟,但有时,在游戏中不丢弃数据包更为重要。如果这对你有什么不同,魔兽世界使用TCP。如果您选择使用UDP,则必须实现一些功能来处理丢弃的数据包。否则,如果玩家使用了一个重要的技能(比如法术中断或治疗)而数据包被丢弃,会发生什么?您可以使用UDP和TCP进行不同的通信,但这会增加很多复杂性。WoW只为所有游戏流量使用一个端口,另外还有一个UDP端口用于游戏内语音聊天,实际上没有人使用

服务器应该如何线程化?每个客户端连接一个线程保留会话信息,然后是一个单独的线程来控制自主世界更改(NPC移动等)

每个客户端连接一个线程可能最终会有很多线程,但如果使用同步套接字,这是必要的。我真的不确定这个问题的最佳答案

“相对较大的数据包应如何传输?(例如,附近约25名玩家及其所有游戏数据、用户名等)TCP或UDP?”

这就是为什么MMORPG服务器的CPU和带宽如此密集的原因。每一个动作都必须传递给数十名玩家,如果规模如此之大,可能会有数百名玩家。这与其说是TCP与UDP的问题,不如说是一个扩展问题。老实说,我不会太担心它,除非你的游戏流行起来,它实际上成为一个问题

“最后-游戏服务器通过HTTP请求与登录服务器交互是否安全,如何(从登录服务器的角度)验证游戏服务器的身份-简单密码、加密?”

您可以轻松地使用SSL

“最后——如果这是相关的——我还没有开始开发客户端——我还不确定我的游戏目标是什么,我只希望服务器可以扩展(最多150名玩家,超出此范围,我预计并理解可能需要进行重大重写)并且能够支持相当数量的玩家和开放世界风格的内容(不需要服务器对物理或类似的东西征税)

我不会在你的服务器上使用Python。它的速度非常慢,无法很好地扩展。对于延迟不是太大问题的web服务器和应用程序来说,这很好,但对于处理100多名玩家的实时游戏服务器来说,我认为它会崩溃。Java可以工作,但即使这样,在本机编码的服务器工作之前,也会遇到扩展问题。我会用java快速地模拟游戏并使它工作,然后考虑在C/C++中改写以加快速度。

还有Python要考虑的事情…如果你还没有读过全局解释器锁,我一定会这么做。由于GIL,Python在多线程处理方面可能非常低效,除非您调用本机库。您可以通过多处理来解决这个问题,但是您必须处理进程之间的通信开销。

这可能不是提出此类问题的最佳场所。您可以删除这一个,并将其发布到gamedev的正确站点-因为它专门用于游戏开发谢谢。有用的信息。