首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lvjiefly
V2EX  ›  程序员

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

  •  
  •   lvjiefly · 5 天前 · 1149 次点击

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

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

    https://help.aliyun.com/document_detail/120986.html
    qiayue
        6
    qiayue   5 天前
    楼主你用了阿里云的物联网平台,说明设备是连接到阿里云的,所以楼上几位说的自建 socket 服务应该是不符合你的使用场景的。

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

    把问题拆解一下:

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

    2. 发送消息给设备。推荐使用 swoole / workerman 之类的扩展,写一个常驻进程应用,消费 Q 队列中的消息,调用 IoT API 发送消息。
    davidyanxw
        11
    davidyanxw   5 天前
    @lvjiefly 那就是 php 作为消费者,去消费 rabbitmq 数据就行。
    php 主要处理和 rabbitmq 的关系就行
    Oktfolio
        12
    Oktfolio   5 天前
    @lvjiefly php-amqplib
    Reflection
        13
    Reflection   5 天前
    @lvjiefly 如同楼上 davidyanxw 所说的方式,我目前所单独建立的设备服务就是消费 rabbitmq 内的数据
    caola
        14
    caola   5 天前
    此时不上 swoole 更待何时 +1
    l0wkey
        15
    l0wkey   5 天前
    yc8332
        16
    yc8332   5 天前
    要看是什么交互方式。。如果请求接口的那就按接口写就行了。如果长连接的那就自己写个 socket 或者用 workerman,swoole 框架。
    gabezhao
        17
    gabezhao   5 天前
    此时不上 swoole 更待何时 +2
    xingjue
        18
    xingjue   4 天前
    php 就 swoole 或者 workerman
    nocrush
        19
    nocrush   4 天前
    阿里云 物联网平台需要写一个 php 服务循环拉去里面的消息
    shellic
        20
    shellic   4 天前 via Android
    赞同 10 楼讲的
    dyyhobby
        21
    dyyhobby   4 天前
    阿里有个 MQTT 让设备连接 MQTT 数据通过 MQTT 协议传输 PHP 可以开几个进程消费 RocketMQ 的数据就行。
    to2false
        22
    to2false   4 天前
    此时不上 swoole 更待何时 +3
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2793 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:26 · PVG 17:26 · LAX 02:26 · JFK 05:26
    ♥ Do have faith in what you're doing.