现在,客户端与服务器的连接算是正式建立了,此时用户需要做的第一件事就是登陆。不过在登录之前,我们要先研究下前后端通信的协议。
客户端与服务端建立连接后,通过提前制定好的协议进行交互。具体的协议文档在doc文件夹下。
典型的协议结构如下(此处为用户登录的10000协议):
*** 协议说明 ***
1.协议号由5位数字组成,前两位表示协议分类(主要用于区分不同的功能模块),后三位是该分类下的具体命令号,有效范围是10,000-64,000;(短整型)
2.同一协议号最多可定义两种数据结构,分别用于描述上行和下行数据;
协议分为两个部分:协议号(Cmd)和协议体(Data),打包为二进制的协议形式则为:总长度(Len),协议号(Cmd)和协议体(Data)
我们来看下sd_reader.erl中协议解析相关的部分代码:
login_parse_packet(Socket, Client) ->
Ref = async_recv(Socket, ?HEADER_LENGTH, ?HEART_TIMEOUT),
receive
{inet_async, Socket, Ref, {ok, <<Len:16, Cmd:16>>}} ->
BodyLen = Len - ?