上一篇文章咱们讨论了聊天的基本流程,那么咱们如今基于上一篇文章的流程开始定义协议,若是有朋友有更好的建议,能够在下边回复一块儿学习讨论,咱们说登陆分为两部分,第一部分为和服务器的链接阶段,第二部分为验证阶段,那么首先咱们基于这2个部分来指定协议:android
链接阶段:ios
{"id":"xxxx","#":"conn","u":1000@android/ios,"v":100}json
id:客户端生成的id数组
#:表示行为,通俗意义是那个说,咱们要作什么操做,该属性主要是对应服务器上的Handler服务器
u:这里表示用户信息的意思,其实后边这个字符串表明2个含义,@以前是用户id,@以后是用户的手机版本,咱们要获取用户的手机版本,分开写也能够,可是在这里感受不必分开就直接何在一块儿了学习
v:用户当前该软件的版本号,主要是为了检查用户手机上当前版本用的加密
用户讲上述json发送到服务器,那么服务器要响应客户端,因此这里咱们还要定义服务器端给客户端返回的协议格式spa
响应链接阶段:ip
{"id":"xxxx","#":"conn","ssl":"[1]","rar":"[1,2]","ips":"[]"}ssl
id:没什么好说的,服务器端生成的id
#:对应的Handler,通俗说即便表示响应的哪个action,例如链接阶段用户发送act是conn的话,那么这里响应回来#也是conn,相对应
ssl:这里咱们用了一个数组,其实前期用一个值也是没问题的,可是后期咱们可能有还能多种加密方式,因此用数组
rar:这里也是一个数组,表示数据传输的压缩方式
ips:这里表示空闲服务器列表,便于用户选择一个压力小的服务器
好了,到这里为止咱们完成了一个conn阶段,那么下一步就是验证阶段了,咱们继续来讨论协议
auth阶段:
{"id":"xxxx","#":"auth","p":"1","ssl":2}
id:一样是客户端生成的id
#:表示行为,通俗意义是那个说,咱们要作什么操做,该属性主要是对应服务器上的Handler
p:表示加密后的密码
ssl:表示用户选择的何种加密方式进行加密
那么在验证的时候可能会失败,那么服务器会返回错误信息,那么错误信息协议:
auth失败阶段:
{"id":"xxxx","#":"auth","ec":1,"em":"成功/失败"}
id:服务器生成id
#:对应的Handler,通俗说即便表示响应的哪个action,例如链接阶段用户发送act是auth的话,那么这里响应回来#也是auth,相对应
ec:ErrorCode,错误码
em:ErrorMessage ,错误信息
auth成功阶段:
{"id":"xxxx","#":"auth"}
其实这里不单单能够用于auth成功,全部的成功均可以用该协议,那么这就是咱们的登陆阶段的协议制定,关于聊天的协议咱们休息一会,在下一篇在详细介绍,欢迎你们来讨论