我目前正在编写一个多进程网络游戏服务器(一个网守进程告诉玩家当前正在运行的游戏,并允许他们创建和加入游戏,以及每个游戏实例的进程)。
在哪种情况下,网守将TCP连接丢弃到客户端会很有用,在哪种情况下它应该继续监听?例如。如果网守在客户端成功加入游戏,或检索游戏列表或发生错误(例如游戏中没有他试图加入的免费插槽)后关闭连接。或者连接是否应该在超时时关闭?感谢。
答案 0 :(得分:2)
我以网络游戏为生。我们所有非Web或XML请求的连接只要相关就会保持打开状态。客户端打开与服务器的连接,并保持打开状态,直到出现以下情况之一:
我建议不要在大多数网络游戏应用程序中使用UDP。 UDP现在很难通过各种防火墙设置,如果你正在做一些非常重要的事情,你必须在UDP之上编写一个数据包保证系统......这基本上就是TCP 。从旧版本的引擎到新版本,我们从UDP切换到TCP。
答案 1 :(得分:1)
最简单的协议通常为每个单独的事务使用单独的连接。 Web浏览器在最简单的操作模式下,只需连接下载页面然后断开连接即可。但是,重复连接和断开连接到同一台服务器确实带来了开销,因此也可以reuse an existing connection。
另一方面,如果连接使用之间存在长时间延迟,并且存在大量客户端,则必须考虑服务器可以管理的有限数量的并发连接。这是非活动超时可能有用的地方。
保持连接打开还允许您从服务器到客户端进行异步通知,而客户端不需要在防火墙之外。客户端连接然后保持连接,不断读取它。服务器通过连接发送通知。
答案 2 :(得分:0)
以最简单的方式设计协议。这可能意味着在交易结束时关闭连接。
如果应用程序(在线游戏的网守)对性能不重要,或者客户端不需要进行扩展对话,则应该在事务结束时关闭套接字。
如果客户需要提出另一个问题,客户可以随后再制作另一个。
如果您需要扩展到非常高的负载(考虑每台服务器10k并发会话),请考虑使用UDP,其中服务器可以使用单个(或少量)套接字来为大量客户端提供服务。