基于socket.io的网络层开发

网络层为网络游戏最基本的模块,选择websocket作为网络通讯的基本方式,前后端均采用socket.io作为socket框架。

一开始的时候选用的是ws库,但做了个小demo后发现了问题:

  1. 卡顿很严重
  2. 帧严重不同步
  3. 代码组织混乱

主要原因就是,ws比较偏向于底层,我也没有对其进行封装,所以导致代码逻辑很混乱,并且造成了卡顿延迟等问题。
采用socket.io后,因为其本身有大量但封装,使代码更易于维护。
虽然使用socket.io后还是有卡顿,但整体情况比ws好不少。

帧同步 OR 逻辑同步

网络游戏的两种同步方式,一种是帧同步,一种是逻辑同步。
逻辑同步:逻辑同步是将所有的逻辑处理放在服务端,比如射击、子弹轨迹、采集操作等。这种方式对服务器的计算能力要求非常高,并且对网络带宽也有很大的需求,比如一个用户有100个属性,这个数据量就很大。这种模式下,客户端只需要将指令发送给服务端,比如wasd的移动或者鼠标按下等输入事件,也可以很大程度上避免作弊。

帧同步:帧同步相对于逻辑同步,是将逻辑处理放在了客户端,服务端仅做转发功能,比如用户A触发攻击,服务端仅做转发,通知所有客户端A攻击了,而攻击的结果计算均放在客户端。但为了保持数据的一致,服务端也会做一些计算和验证。

我准备开发的是一款单机联机游戏,并且是实践性质的,不需要使用逻辑同步的方式,所以采用帧同步的方式作为网络层的主要同步机制。

猜你喜欢

转载自blog.csdn.net/u011233779/article/details/112981348