客户端与服务器信息交互的流程,Socket服务器和客户端交互流程

主要介绍流程,不写代码

首先是最基础的socket框架搭建

大部分代码是一成不变的,大家可以下一些服务器的源码看一下,就算看不懂也没关系,我们只需要了解处理消息的部分,也是接下来要讲的

要进行通信,首先要定义传输模型,即传什么

传输模型大体包含四个部分

TYPE:类型,战斗模块,登录模块,用户模块等

AREA:区域,这个区域并不是只包含角色所在区域信息,他其实是第一个层级TYPE的细分,比如,如果TYPE是用户模块,则AREA这里会将其细分为装备模块,技能模块等

COMMAND:命令,这个就好理解了,就是要调用哪个函数

Message:信息,这个就是上个层级函数的参数,一般以类的方式传输,比如要注册账号,我们这里就要放一个类似这样的实例

Class a

{

userID = 1;

username = “aaa”;

password = “bbb”;

}

下面举个例子

比如角色进行了一个攻击动作,要通知其他玩家,首先,攻击属于战斗模块,其次,我们要取得角色所在的区域,一般mmorpg会把地图分为好多区域,一个人动了一下只要让能看到他的人知道就行了,没必要让全世界玩家都知道,然后,我们要让他调用attack函数,最后再传入用户信息等

需要注意的是,这4个层级并不会都用到,用不到的置空就行了

前三个层级会传数字,比如客户端和服务器端都定义好了

USER = 0

Skill = 0

Equip = 1

BATTLE = 1

Attack = 0

Defend = 1

接下来就是怎么传

传之前我们会把第四个层级的类对象进行序列化,即以转化为0和1的形式

为了效率,会进行粘包和拆包的处理

粘包 如果我们把一次传输的字节数设为1024

我们会声明一个1024大小的字节数组,当有一个传输模型要发送时,我们先写入这个模型的大小,在写入传输模型,如果不够1024,等待下一条,如果超出1024,则会先把这个1024发出去,把余下的写入下一个1024

拆包则相反

这里我只是简单的介绍一下,如果逻辑考虑全是很麻烦的,具体可见我以前写的http://blog.csdn.net/ymiku/article/details/45937673,有点乱

这里说一下数据的存储,这里一般会设置一个缓存层,如果要更改数据,更改数据库及缓存层,如果取数据,直接从缓存层拿,就不用去数据库找了

最后就是信息的处理

我们会把获得的消息存到一个队列中,然后每一帧递归解析所有的消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值