gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:48:46 24 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我正在开发一款在线多人游戏。我已经为任何持久存储开发了登录服务器和数据库;两者都是用 Python 编写的,将由 Google 的 App Engine 托管。 (目前。)

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

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

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

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

不想问这种问题,因为我知道它们通常被标记为非生产性 - 哪种语言更适合我(作为没有套接字经验的人)来编写足够高效的服务器 - 假设两者的经验相同?

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

最佳答案

"I assume that the majority of gameplay data (e.g. fine player movements) will need to be sent via UDP connections. I'm unfamiliar with UDP connections so I really don't know where to begin designing the server."



UDP 可以降低延迟,但有时更重要的是在游戏中不丢弃数据包。如果它对您有任何影响,魔兽世界使用 TCP。如果您选择使用 UDP,则必须实现一些东西来处理丢弃的数据包。否则,如果玩家使用了重要的能力(例如法术打断或治疗)并且数据包被丢弃了怎么办?您可以同时使用 UDP 和 TCP 来通信不同的事物,但这会增加很多复杂性。 《魔兽世界》只使用一个端口来处理所有游戏流量,另外还有一个 UDP 端口用于游戏中的语音聊天,但实际上没人使用。

"How should the server be threaded? One thread per client connection that retains session info, and then a separate thread(s) to control autonomous world changes (NPCs moving, etc.)?"



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

"How should relatively large packets be transmitted? (e.g. ~25 nearby players and all of their gameplay data, usernames, etc.) TCP or UDP?"



这就是 MMORPG 服务器的 CPU 和带宽如此密集的原因。每个 Action 都必须转发给潜在的数十名玩家,如果规模那么大,可能有数百名。这更像是一个扩展问题,而不是 TCP 与 UDP 问题。老实说,除非你的游戏流行起来并且它实际上成为一个问题,否则我不会太担心它。

"Lastly - is it safe for the gameplay server to interface with the login server via HTTP requests, how do I verify (from the login server's perspective) the gameplay server's identity - simple password, encryption?"



您可以轻松使用 SSL。

"Lastly - if this is relevant - I have not begun development on the client - not sure what my goals for the game itself are yet, I just want the servers to be scalable (up to ~150 players, beyond that I expect and understand that major rewrite will probably be necessary) and able to support a fair amount of players and open-world style content. (no server-taxing physics or anything like that necessary)"



我不会将 Python 用于您的服务器。它非常缓慢,并且无法很好地扩展。对于延迟不是太大问题的 Web 服务器和应用程序来说这很好,但对于处理 100 多个玩家的实时游戏服务器,我想它会分崩离析。 Java 可以工作,但即使这样也会在原生编码服务器之前遇到扩展问题。我会使用 Java 快速制作游戏原型(prototype)并使其运行,然后考虑在 C/C++ 中重写以加快速度。

另外,关于 Python 的一些事情需要考虑……如果你还没有读过 Global Interpreter Lock,我会确保这样做。由于 GIL,Python 在多线程方面可能非常低效,除非您正在调用 native 库。您可以通过多处理来解决它,但是您必须处理进程之间通信的开销。

关于java - 为在线多人游戏构建服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com