- Java游戏服务器架构实战
- 王广帅编著
- 933字
- 2025-03-19 16:19:11
1.3.1 网络通信长连接与短连接
网络通信最基本的要求就是客户端和服务器通过互联网进行通信。网络通信有两种方式,一个是长连接,一个是短连接。长连接是指,客户端与服务器一旦建立好连接之后,就维护这个连接,并保证这个连接不断开。长连接的优点是客户端每次发送请求都不用重新建立连接,有请求可以立即发送,从而节省消息发送的时间。而且长连接通信是双向的,服务器也可以主动给客户端发送消息,比如向其他客户端转发另一个客户端发送的聊天消息,或主动告知客户端一些数据状态的变化。而长连接的缺点是会一直占用计算机资源(内存、文件句柄、网络I/O)。
在Linux操作系统上,每一个长连接会占用一个Socket句柄,可以使用命令ulimit –n查看当前系统支持的最高Socket句柄数,不同系统的默认值不一样,有的是1 024,有的是65 535。可以使用root身份,使用命令修改最高的Socket句柄数:ulimit –n 2048(将最高句柄数修改为2 048)。由于单台服务器的资源是有限的,所以单台服务器支持的客户端长连接的数量也是有限的。
短连接是指客户端与服务器建立好连接,一次请求返回之后,这个连接就会断开,不需要维持连接。短连接的优点是连接断开之后资源就会释放,不再占用服务器资源,可以为更多的客户端提供服务。短连接的缺点是每次请求都需要等待建立新的连接,请求发送会慢一些,HTTP就是常用的短连接协议之一。
在游戏服务器的开发中,这两种方式是混合使用的,可相互弥补各自的不足,发挥各自的优点。如图1.2所示,既有Web-Gate,又有Server-Gate。Web-Gate是Web服务器网关,用于接收所有的HTTP请求。在游戏服务中,客户端的一些功能与服务器的交互频率非常低,比如用户注册、登录、公告等,所以没有必要使用长连接。而且HTTP是通用的协议,有很多现成的成熟框架可以使用,可节省开发成本,比如Web服务器网关,负载均衡,消息转发等。
而用户进入游戏之后,在玩游戏的过程中会与服务器频繁地交互数据,这个时候需要关注的就是消息响应速度了。速度越快,游戏越流畅,用户体验就越好。因此长连接是最好的选择,进入游戏时,连接就建立好了,不用每次发送消息都建立新的连接,有请求可以立即发送,节省等待时间。
这里说的长连接是基于Socket封装的TCP。它是一种安全可靠、有序的数据流协议,目前被很多游戏开发人员采用。另外一种UDP不在本书的讨论范围之内,有兴趣的读者可以自行学习。