首页 » SEO优化 » php下位机通信技巧_基于LaravelSwoole开拓智能家居后端

php下位机通信技巧_基于LaravelSwoole开拓智能家居后端

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

本日,我参与的智能家居项目基本上已经结束了Web做事器及android真个开拓(熬了个通宵突击把剩下的做了,好累), 趁热来聊聊基于Laravel+Swoole开拓智能家居后真个关键技能点。

16进制ASCII码协议的解析

硬件我不谈,我只须要关心数据解析。
如何基于Swoole如果在php中解析16进制的ascii码,这种文章还比较少呢。
但核心的部分还是可以整理出来的,关键用到的便是chr、hexdec、bin2hex这3个函数,网上还提到了用pack、unpack,由于前面3个函数以及很好的办理了问题,以是就没有连续深入。
我建议在这里Php Manual官网先熟习下这几个函数。

php下位机通信技巧_基于LaravelSwoole开拓智能家居后端

chr函数从不同的 ASCII 值返回字符,hexdec 函数把十六进制转换为十进制。
常日结合这两个函数把16进制字符串转换为ASCII字符串,理解起来有点绕。
\r例如: echo chr(hexdec('fe'));//输出的便是下位性能认识的16进制的FE,大小写不敏感\r\rbin2hex函数把 ASCII 字符的字符串转换为十六进制值,用于从Swoole中读取数据的转换。
\r例如:$buffer = str_split(bin2hex($data), 2);//$data是Swoole中OnReceive事宜通报的值

在解析协议时,上例中的$buffer数组中,存放了协议的每一位。
那么怎么解析呢?最快最

是不是太弱鸡了点(.NET和JAVA有很丰富的byte[]转整形和字符串的方法集)?如果你须要,可以自己写个转换工具类出来(我暂时用不上就没整理)。

php下位机通信技巧_基于LaravelSwoole开拓智能家居后端
(图片来自网络侵删)

不才位机通信中还有一个很主要的技能点便是XOR校验,我是从stackoverflow找到的源码,直接贴地址。

16进制ASCII码协议的创建

不废话,直接上代码:

对Laravel利用者,在这部分我强烈建议好好复习一下Laravel供应的快速数组函数赞助方法。

与硬件的曲线通信

基于Swoole吸收数据在上一篇中已经详细先容不再累述,这里紧张说说向硬件发送数据的问题。
上一篇中,我提到了2种方法,一种是利用fsockopen函数;一种是内部端口监听。
这里还和搞硬件的大神闹了个笑话,酡颜啊..对基于TCP/IP协议的通信,由于端口一贯被吸收监听占用,以是用fsockopen或者socket_write函数是行不通的,必须基于第二种办法曲线实现硬件通信。

首先在Command中添加内部端口的监听,把稳onReceive事宜被自定义的InnerHandler吸收(不知所云者请复习上一篇以及Swoole的文档)。

一定记得在iptables中把你的内部监听端口打开!!

在Innerhandler中,若吸收到须要发送到硬件的命令(便是上一节说的数据),从缓存里面提取该硬件的连接实体,然后发送数据(不知所云请参考Swoole文档)。

这里比较曲线的情形便是在这个缓存,这个缓存是在须要发送数据的时候设定的,那么怎么知道硬件的连接实体是什么?当然是保持一个KV构造的数据啦:)

全体曲线的通信过程便是:当须要向硬件发送数据的时候,首先将数据发送到这个内部监听端口来,然后再从这里发送到硬件去。

怎么向内部监听端口发送数据呢?用fsockopen或者socket_write都是完备没问题的,这里的代码就请自行搜索,权当练习,不要太

Event大有裨益

这个要用过了才知道有多方便,来这里先好好复习一下。
实现过程请自行感想熏染,我就只说说我哪里用到了Event:

1.基于JPUSH推送\r2.向内部监听发送数据

其余只补充一点,想利用Event通过Swoole发送数据的路是行不通的。

优雅的快速测试

由于PHP是弱类型,因此理解起来比较费解。
吸收数据和向硬件发送数据的数据类型是不一样的。
用bin2hex得到的是形如\公众11 00 00 FE\"大众的字符串,用chr(hexdec)得到的是16进制的ASCII码,如果echo输出的话,会是乱码。
那么如何测试(看到)自己天生的16进制ASCII码数据是否精确呢?1种是找一个TCP/IP工具发送过去,这种麻烦了点,我推举用fiddler监听。

你可以快速方便的用一个web页面输出你的ASCII码,在fiddler的HexView中,就可以看到原汁原味你发送的16进制数据了。
其余,由于Swoole的监听类是CLI运行,因此我也非常推举多写一点echo打印一下状态,在phpstorm的SSH客户端里可以快速的理解目前的情形,就像android-studio的Loger一样。

echo Carbon::now . '/Device Numbers:' . $devNum . PHP_EOL;//老司机劝你多写点,最好packagist找个轮子或者自己写个Logger库

鲁棒性磋商,可以搞得非常繁芜

算吐个槽吧,前年用.NET做下位机数据处理鲁棒性的时候真是如坐针毡啊。
搞下位机通信果真还是c++最得当啊,以下问题在这里还须要后期逐步完善呢:

1.如果硬件发送的数据不是一个包发完而是分批发怎么办?\r2.看门狗是一定要写的,对吧?\r3.与硬件通信的response处理要做吧?\r4.TimeOut怎么办?\r....

啊啊啊啊啊....

喜好Android的有福了

预报下,基于学习的目的,最近正在仿鲜城、enjoy、半糖这3个很有代表性的电商APP首页UI(是逆向着看smali和提取res在仿哟)。

鲜城的android端已经做的有模有样了,这次是逼着自己android、ios都给仿出来,没老司机带就自己想办法提高。

先做android的,有兴趣的朋友可以耐心等待代码和文章。

标签:

相关文章

大数据时代的规律探析,趋势与挑战并存

随着信息技术的飞速发展,大数据已成为当今世界的一个重要特征。大数据以其庞大的数据规模、快速的数据增长和多样化的应用场景,逐渐成为各...

SEO优化 2024-12-16 阅读0 评论0

mysqlwhile轮回php技巧_PHP 轮回While 轮回

PHP 循环在您编写代码时,您常常须要让相同的代码块一次又一次地重复运行。我们可以在代码中利用循环语句来完成这个任务。在 PHP...

SEO优化 2024-12-16 阅读0 评论0

大数据时代的降临,变革与创新的风口浪尖

在当今社会,大数据已经成为推动科技创新、产业升级和经济增长的重要引擎。随着互联网、物联网、云计算等技术的飞速发展,大数据的时代已经...

SEO优化 2024-12-16 阅读0 评论0