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

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

  •  
  •   lvjiefly · 11 天前 · 1186 次点击

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

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

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

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

    把问题拆解一下:

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

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