做一个稍微复杂一点的APP都要涉及网络,网络通讯简单一点的是使用HTTP协议,HTTP协议是PULL的,我也蛮喜欢HTTP的,因为简单。对于需要大量交互的应用还是要用socket,所以基本上还是要自己制订协议,做过几个应用都有用到这方便的东西,所以也想总结一下,由于自己的知识有限,随着学到的东西越来越多,可能会发现这篇文章有一些错误或者需要改进的地方,我会随时更新。
协议的字段
先说说我认为一个协议必要的几个字段:
1、长度字段
TCP是一个流协议,我们想要发送一个包时,会将数据写入TCP的发送缓冲区中,至于TCP怎样发送,这是与TCP的实现和网络状况相关的,接收端收到可读通知可能一次从接收缓冲区读一部分数据也可能是全部数据,这都是不确定的。所以每一个协议都要有一个长度字段,这样接收端就可以知道某一个包是从何时开始从何时结束的,从而正确解析这个包。
2、transition id
我们把这个字段叫做事务id,为什么需要这个字段呢?
一般来说,我们发送给服务器的包,都想要服务器有一个回应,那么如何标志这个请求对应的是哪一个回应呢,使用的就是事务id,当然可能有人会说tcp是保证发包的顺序的,如果两个请求发出去然后收到两个回应的顺序应该是一样的,这样的说法虽然正确,但是它依赖于服务器的逻辑,虽然服务器收到的请求是按照顺序的,但是服务器的响应未必先返回最先接收的包;另外就是这样做客户端的逻辑处理会很麻烦,所以个人觉得事务id是很有必要的。
服务端发送的响应包也要有事务id字段,并且要与客户端请求包中的事务id相同。
3、协议