PHP 服务端如何接受阿里云物联网平台的事件?

2020-06-29 14:18:17 +08:00
 lvjiefly

大家好,最近做 php 对接阿里云物联网平台,需要接收设备发送的事件,不知道从哪入手,有没有人做过类似的需求? 需求是这样的,设备获取芯片号码后发送一个事件,这个是硬件工程师来做的,我这边需在再服务器上接受这个事件,然后判断,返回给设备一个结果。 项目是 TP5 搭建的,SDK 装好了,API 都可以访问到,但是不知道怎么做一个服务来处理事件

3303 次点击
所在节点    程序员
23 条回复
Reflection
2020-06-29 14:26:13 +08:00
看你是否需要维持链接,我这边因为涉及到摄像头,数据用的 ws 传,然后如果是定时或者时效性不高的数据,做了一个独立的设备服务,专门用于接受事件处理数据然后入库,设备服务和项目本身只使用同一组数据,我不知道你问的是不是这个意思
lvjiefly
2020-06-29 14:34:40 +08:00
@Reflection 你好,感谢你的回复
我这边需求对时效性要求比较高,要求在事件触发后,我这边就要及时处理并返回处理结果,硬件等待结果决定是否进行下一步操作,连续性比较强。
在看官方文档,但还不是很明白。
没做过类似的,什么建议都可以,请多指教
chinvo
2020-06-29 14:41:37 +08:00
一般思路是写个 cli command, 里面死循环, 然后 php cli 去跑
batyu
2020-06-29 14:43:01 +08:00
此时不上 swoole 更待何时
AngryPanda
2020-06-29 14:43:57 +08:00
没搞过,看一下这种发布订阅模式可以吗?

https://help.aliyun.com/document_detail/120986.html
qiayue
2020-06-29 14:47:30 +08:00
楼主你用了阿里云的物联网平台,说明设备是连接到阿里云的,所以楼上几位说的自建 socket 服务应该是不符合你的使用场景的。

那么你只需要去搞懂,阿里云接收到设备的消息后,怎么转发到你的服务,是 socket 请求,还是 http 请求?
lvjiefly
2020-06-29 14:58:55 +08:00
@AngryPanda 订阅以后接受消息(或者是队列)根据设备 ID 和传给我的值进行处理,处理完了以服务的方式发给设备(根据设备 ID 找到这个设备),现在大概是这样想的
lvjiefly
2020-06-29 15:01:05 +08:00
@qiayue 目前看是需要订阅的,官方文档这样描述 [服务器通过 AMQP 客户端接收消息,需配置 AMQP 客户端接入物联网平台,监听设备消息] ,但是没有 PHP 的接入示例,查了下可能需要"rabbit mq"
xnode
2020-06-29 15:01:23 +08:00
cli command 启动一个长进程 拉取队列消息
AngryPanda
2020-06-29 15:10:35 +08:00
@lvjiefly #7 我看了文档介绍,也就是如此啊。所以没啥问题啊。由于不能直接和设备通信,所以你只用管如何跟 IoT 平台通信即可。

把问题拆解一下:

1. 接收设备消息。推荐使用 swoole / workerman 之类的扩展,写一个常驻进程应用,订阅 IoT 消息。收到设备消息后,将需要返回给设备的消息写入本地消息队列 Q,供步骤 2 消费(如果量不大也可以同步调用 API 返回,这样就无需步骤 2 )。

2. 发送消息给设备。推荐使用 swoole / workerman 之类的扩展,写一个常驻进程应用,消费 Q 队列中的消息,调用 IoT API 发送消息。
davidyanxw
2020-06-29 15:12:17 +08:00
@lvjiefly 那就是 php 作为消费者,去消费 rabbitmq 数据就行。
php 主要处理和 rabbitmq 的关系就行
Oktfolio
2020-06-29 15:21:06 +08:00
@lvjiefly php-amqplib
Reflection
2020-06-29 15:59:44 +08:00
@lvjiefly 如同楼上 davidyanxw 所说的方式,我目前所单独建立的设备服务就是消费 rabbitmq 内的数据
caola
2020-06-29 16:00:45 +08:00
此时不上 swoole 更待何时 +1
l0wkey
2020-06-29 16:05:35 +08:00
yc8332
2020-06-29 16:19:27 +08:00
要看是什么交互方式。。如果请求接口的那就按接口写就行了。如果长连接的那就自己写个 socket 或者用 workerman,swoole 框架。
gabezhao
2020-06-29 17:06:46 +08:00
此时不上 swoole 更待何时 +2
xingjue
2020-06-29 18:02:41 +08:00
php 就 swoole 或者 workerman
nocrush
2020-06-29 19:29:13 +08:00
阿里云 物联网平台需要写一个 php 服务循环拉去里面的消息
shellic
2020-06-30 07:45:01 +08:00
赞同 10 楼讲的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685601

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX