分为客户端和服务端两个部分,客户端程序运行在用户的电脑或手机上,服务端程序运行在游戏运营商的服务器上。
以下是一些典型的游戏客户端。
《金铲铲之战》客户端
《英雄联盟》客户端
TCP是游戏中常用的网络通信协议,除此之外还有UDP、KCP、HTTP等协议。
客户端和客户端之间通过服务端的信息转发进行通信。
玩家1移动->客户端1向服务端发送新的坐标信息->服务端处理信息->服务端将玩家1的新坐标转发给客户端2->客户端2收到信息并更新玩家1的位置。
为了支撑可能百万的用户同时在线,游戏服务端通常采用分布式架构。使用分区的服务端,每个服务端负责不同区的玩家。
客户端连接服务端。服务端之间互相连接(通常使用TCP网络通信),形成服务端集群。
网络中两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个Socket。
网络上的计算机都是通过IP地址识别的,应用程序通过通信端口彼此通信。
端口是设备与外界通信交流的出口。
Socket通信的基本流程如下所示:
(1)开启一个连接前需要创建一个Socket对象(使用API Socket),然后绑定本地使用的端口(API Bind)。客户端在连接时(使用API Connect)会有系统分配端口。(即客户端和服务端都需要先创建Socket然后绑定端口)
(2)服务端开启监听(使用API Listen),等待客户端接入(API Connect)。
(3)客户端连接服务端(使用API Connect)。
(4)服务器接受连接(使用API Accept)。
(5)客户端和服务端通过Send和Receive等API 收发数据,操作系统会自动完成数据的确认、重传等步骤,确保传输的数据准确无误。
(6)某一方关闭连接(API Close),操作系统会执行 ”四次挥手“ 的步骤,关闭双方连接。