PHP 服务端如何接受阿里云物联网平台的事件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lvjiefly
V2EX    程序员

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

  •  
  •   lvjiefly 2020-06-29 14:18:17 +08:00 3714 次点击
    这是一个创建于 1934 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    把问题拆解一下:

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

    2. 发送消息给设备。推荐使用 swoole / workerman 之类的扩展,写一个常驻进程应用,消费 Q 队列中的消息,调用 IoT API 发送消息。
    davidyanxw
        11
    davidyanxw  
       2020-06-29 15:12:17 +08:00
    @lvjiefly 那就是 php 作为消费者,去消费 rabbitmq 数据就行。
    php 主要处理和 rabbitmq 的关系就行
    Oktfolio
        12
    Oktfolio  
       2020-06-29 15:21:06 +08:00
    @lvjiefly php-amqplib
    Reflection
        13
    Reflection  
       2020-06-29 15:59:44 +08:00
    @lvjiefly 如同楼上 davidyanxw 所说的方式,我目前所单独建立的设备服务就是消费 rabbitmq 内的数据
    caola
        14
    caola  
       2020-06-29 16:00:45 +08:00
    此时不上 swoole 更待何时 +1
    l0wkey
        15
    l0wkey  
       2020-06-29 16:05:35 +08:00
    yc8332
        16
    yc8332  
       2020-06-29 16:19:27 +08:00
    要看是什么交互方式。。如果请求接口的那就按接口写就行了。如果长连接的那就自己写个 socket 或者用 workerman,swoole 框架。
    gabezhao
        17
    gabezhao  
       2020-06-29 17:06:46 +08:00
    此时不上 swoole 更待何时 +2
    nxcdJaNnmyF9O90X
        18
    nxcdJaNnmyF9O90X  
       2020-06-29 18:02:41 +08:00
    php 就 swoole 或者 workerman
    nocrush
        19
    nocrush  
       2020-06-29 19:29:13 +08:00
    阿里云 物联网平台需要写一个 php 服务循环拉去里面的消息
    shellic
        20
    shellic  
       2020-06-30 07:45:01 +08:00 via Android
    赞同 10 楼讲的
    dyyhobby
        21
    dyyhobby  
       2020-06-30 09:01:08 +08:00
    阿里有个 MQTT 让设备连接 MQTT 数据通过 MQTT 协议传输 PHP 可以开几个进程消费 RocketMQ 的数据就行。
    to2false
        22
    to2false  
       2020-06-30 13:04:16 +08:00
    此时不上 swoole 更待何时 +3
    lvjiefly
        23
    lvjiefly  
    OP
       2020-07-10 16:04:40 +08:00
    @AngryPanda
    问题解决了,感谢大家的思路
    最后是这样做的:
    因为阿里云文档关于订阅消息的通信没有 php 的示例,但是有 nodejs 的示例
    就使用了 nodejs 来消费消息,同时做一个请求到 TP5 的控制器来处理业务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5438 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 07:57 PVG 15:57 LAX 00:57 JFK 03:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86