php中使用swoole实现头协议

  • 时间:2017-12-08
  • 分类:PHP编程
  • 946 人浏览
[导读]当需要有数据交互的时候,为了安全起见,双方会协商一个固定的头协议,这样必须实现其头协议才能拿到数据。PHP的swoole完美的提供了固定包头+包体协议自动分包。

当需要有数据交互的时候,为了安全起见,双方会协商一个固定的头协议,这样必须实现其头协议才能拿到数据。

PHP的swoole完美的提供了固定包头+包体协议自动分包。

首先需要通过open_length_check打开固定包头包体协议,再用package_length_offset规定包头中第几个字节是整个包长度,package_body_offset是从第几个字节开始计算长度,比如包头为长度为120字节,第10个字节为长度值,包体长度为1000。如果长度包含包头,这里填入0,如果不包含包头,这里填入120。最后一个是package_length_type,表示长度字段的类型,涉及到网络字节序和机器字节序,都是以字节为单位的。详细信息可以自己去了解。配置如下:

php中的pack和unpack可以用来处理和解析网络字节序。比如:我们发的包头是

也许有人会问,为什么长度是40加上包体长度,因为我们这里的N是无符号、网络字节序、4字节,而是无符号、1字节,然后规定uuid的长度是为33个字节,所以整个包头长度为33+4+1+1+1,那就是40了。至于各个字段的意义,那是看你们自己的定义的。

包头发了,肯定就有解析,这里只说明PHP对以上包头的解析。其实很简单,只是按照上面的顺序逐一用unpack解析出来就可以了。

因为开启了open_length_check,所以swoole会在你接收到全部的数据后,才开始对数据进行处理。不过我有一点不明白,为什么接收到整个数据后,用unpack("N", $data)[1]就可以接收到第一个传的数据?望知道的大神不吝赐教!

来源:本文为线上采编,如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除!
标签: swoole