thinkphp5 使用workerman门禁设备推送、接收信息方案

本文介绍了如何使用ThinkPHP5框架结合Workerman组件,实现服务器端的门禁设备信息推送和接收。步骤包括:安装Workerman、配置启动器、创建Controller以及启动WebSocket服务。
摘要由CSDN通过智能技术生成

背景

近期公司要对接门禁设备,把服务器的人员信息推送到门禁设备里面。程序用的thinkphp5使用workerman组件。

	1.安装wokerman
	2.配置启动器
	3.配置controller
	4.启动websocket服务
	5.客户端调用

服务器端

1.安装wokerman

安装方式官网推荐使用composer,在项目根目录下运行
composer require topthink/think-worker -vvv
如果不习惯用composer,那你就直接下载workerman后拷贝到vendor文件夹使用

2.配置启动器

在项目根目录下创建文件server.php

<?php
#!/usr/bin/env php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

 3.配置controller

这一步就是新建一个controller,我这里是直接在application文件夹push/controller中创建了的Worker.php

<?php
 namespace app\push\controller; 
use think\worker\Server; 
use Workerman\Lib\Timer;
use think\Hook;
use think\Request;
use think\Db;


class Worker extends Server
{
    protected $socket = 'websocket://0.0.0.0:2346';

    public $connectionArr = array();

 /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        global $worker;
        $list = json_decode($data,true);
        // var_dump($list);

        // 给connection临时设置一个lastMessageTime属性,用来记录上次收到消息的时间
        $connection->lastMessageTime = time();

         switch ($list['method']) {
            case "registerDevice":
                if (!isset($connection->uid)) {
                    $time = time();
                    $connection->uid = $list['params']['DeviceId'];
                    echo "\r\n" . date('Y-m-d H:i:s') . "\r\n";
                    // echo "设备连接开始:" . "\r\n";
                    echo "连接设备的设备号:" . $list['params']['DeviceId'];
                    /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
                     * 实现针对特定uid推送数据
                    */
                    $worker->uidConnections[$connection->uid] = $connection;

                    # 查询设备是否在系统
                    $device = Db::table('moredian_device')
    						->where('deviceSn', $list['params']['DeviceId'])
    						->find();
    				if($device){
    				    # 发送返回数据
    				    $Timestamp = ['Timestamp' => time()];
    				    $arr = array('method'=>'registerDevice','params' =>$Timestamp, 'result'=>0,'errMsg'=>'设备已经注册!','req_id'=>$list['req_id']);
    				    $connection->send(json_encode($arr));
    
    				}else{
    				    $device_data = [
                        				'deviceId'       => $list['req_id'],
                                        'deviceName'  => $list['params']['ProdName'],
                                        'deviceSn' => $list['params']['DeviceId'],
                                        'controlDoorTime' => $list['params']['DeviceVerDate'],
                        				'deviceType' => $list['params']['ProdType'],
                                        ];
    				    Db::table('moredian_device')->insert( $device_data );
    				    # 发送返回数据
    				    $Timestamp = ['Timestamp' => time()];
    				    $arr = array('method'=>'registerDevice','params' =>$Timestamp, 'result'=>0,'errMsg'=>'Success','req_id'=>$list['req_id']);
    				    $connection->send(json_encode($arr));
    				}
                }
                break;
            case "heartBeat":
                 # 发送返回数据
				    // $Timestamp = ['Timestamp' => time()];
				    $device_data = [
                        			'status'       =>1
                                   ];
    				Db::table('moredian_device')->where('deviceSn',$list['params']['DeviceId'])->upda
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨信

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值