mqtt服务器搭建php,MQTT 服务端
MQTT 服务端
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
安装:composer require imiphp/imi-mqtt
项目配置文件:[
'components' => [
'MQTT' => 'Imi\MQTT',
],
]MQTT 功能要求 PHP >= 7.2
配置
首先,服务器配置的type设为MQTT,并且定义好控制器。
控制器需要继承Imi\Server\MQTT\BaseMQTTController类,并且实现方法。
如果你是主服务器,配置如下:'mainServer' => [
'namespace' => 'ImiApp\MQTTServer',
'type' => 'MQTT',
'host' => '127.0.0.1',
'port' => 8081,
'controller' => \ImiApp\MQTTServer\Controller\MQTTController::class,
// 'configs' => [
// // 启用 MQTTS 配置证书
// 'ssl_cert_file' => dirname(__DIR__) . '/ssl/server.crt',
// 'ssl_key_file' => dirname(__DIR__) . '/ssl/server.key',
// ],
],
如果你是子服务器,配置如下下:// 子服务器(端口监听)配置
'subServers' => [
'xxxServer' => [
'namespace' => 'ImiApp\MQTTServer',
'type' => 'MQTT',
'host' => '127.0.0.1',
'port' => 8081,
'controller' => \ImiApp\MQTTServer\Controller\MQTTController::class,
// 'configs' => [
// // 启用 MQTTS 配置证书
// 'ssl_cert_file' => dirname(__DIR__) . '/ssl/server.crt',
// 'ssl_key_file' => dirname(__DIR__) . '/ssl/server.key',
// ],
],
],
通讯数据包类
imi-mqtt 基于 binsoul/net-mqtt 开发,使用的都是这个包中的数据包结构类。
类名一般是BinSoul\Net\Mqtt\Packet\XXX
如:\BinSoul\Net\Mqtt\Packet\SubscribeRequestPacket
控制器<?php
namespace ImiApp\MQTTServer\Controller;
use Imi\Server\MQTT\BaseMQTTController;
use Imi\Server\MQTT\Message\ReceiveData;
use BinSoul\Net\Mqtt\Packet\PublishAckPacket;
use BinSoul\Net\Mqtt\Packet\PingRequestPacket;
use BinSoul\Net\Mqtt\Packet\PingResponsePacket;
use BinSoul\Net\Mqtt\Packet\ConnectRequestPacket;
use BinSoul\Net\Mqtt\Packet\PublishReleasePacket;
use BinSoul\Net\Mqtt\Packet\PublishRequestPacket;
use BinSoul\Net\Mqtt\Packet\ConnectResponsePacket;
use BinSoul\Net\Mqtt\Packet\PublishCompletePacket;
use BinSoul\Net\Mqtt\Packet\PublishReceivedPacket;
use BinSoul\Net\Mqtt\Packet\SubscribeRequestPacket;
use BinSoul\Net\Mqtt\Packet\DisconnectRequestPacket;
use BinSoul\Net\Mqtt\Packet\SubscribeResponsePacket;
use BinSoul\Net\Mqtt\Packet\UnsubscribeRequestPacket;
use BinSoul\Net\Mqtt\Packet\UnsubscribeResponsePacket;
class MQTTController extends BaseMQTTController
{
/**
* 连接
*
* @param \BinSoul\Net\Mqtt\Packet\ConnectRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return \BinSoul\Net\Mqtt\Packet\ConnectResponsePacket|null
*/
public function connect(ConnectRequestPacket $request, ReceiveData $receiveData): ?ConnectResponsePacket
{
$success = 'root' === $request->getUsername() && '123456' === $request->getPassword();
$response = new ConnectResponsePacket;
if($success)
{
$response->setReturnCode(0);
}
else
{
$response->setReturnCode(4);
}
return $response;
}
/**
* 断开连接
*
* @param \BinSoul\Net\Mqtt\Packet\DisconnectRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return void
*/
public function disconnect(DisconnectRequestPacket $request, ReceiveData $receiveData): void
{
}
/**
* Ping
*
* @param \BinSoul\Net\Mqtt\Packet\PingRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return \BinSoul\Net\Mqtt\Packet\PingResponsePacket|null
*/
public function ping(PingRequestPacket $request, ReceiveData $receiveData): ?PingResponsePacket
{
return new PingResponsePacket;
}
/**
* 发布
*
* @param \BinSoul\Net\Mqtt\Packet\PublishRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return \BinSoul\Net\Mqtt\Packet\PublishAckPacket|\BinSoul\Net\Mqtt\Packet\PublishReceivedPacket|\BinSoul\Net\Mqtt\Packet\PublishReleasePacket|\BinSoul\Net\Mqtt\Packet\PublishCompletePacket|null
*/
public function publish(PublishRequestPacket $request, ReceiveData $receiveData)
{
switch($request->getTopic())
{
case 'a':
$response = new PublishAckPacket;
break;
case 'b':
$response = new PublishReceivedPacket;
break;
case 'c':
$response = new PublishReleasePacket;
break;
case 'd':
$response = new PublishCompletePacket;
break;
}
$response->setIdentifier($request->getIdentifier());
return $response;
}
/**
* 订阅
*
* @param \BinSoul\Net\Mqtt\Packet\SubscribeRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return \BinSoul\Net\Mqtt\Packet\SubscribeResponsePacket|null
*/
public function subscribe(SubscribeRequestPacket $request, ReceiveData $receiveData): ?SubscribeResponsePacket
{
$response = new SubscribeResponsePacket;
$response->setIdentifier($request->getIdentifier());
$response->setReturnCodes([0]);
return $response;
}
/**
* 取消订阅
*
* @param \BinSoul\Net\Mqtt\Packet\UnsubscribeRequestPacket $request
* @param \Imi\Server\MQTT\Message\ReceiveData $receiveData
* @return \BinSoul\Net\Mqtt\Packet\UnsubscribeResponsePacket|null
*/
public function unsubscribe(UnsubscribeRequestPacket $request, ReceiveData $receiveData): ?UnsubscribeResponsePacket
{
$response = new UnsubscribeResponsePacket;
$response->setIdentifier($request->getIdentifier());
return $response;
}
}
mqtt服务器搭建php,MQTT 服务端相关推荐
- 一步一步来:MQTT服务器搭建、MQTT客户端使用
物联网应用如火如荼,本文就物联网应用中最受青睐的协议 MQTT相关测试工具的使用进行简单说明. 希望此文能给需要用到的朋友一些微薄的帮助-- 一.MQTT服务器( emqx )搭建 1. 下载服务器M ...
- 腾讯云服务器搭建MC私服服务端启动后仍然Connection timed out问题
服务器端CentOS8系统 mc服务端正常启动 服务器控制台25565端口已开放 仍然是Connection timed out 是因为CentOS防火墙没有打开 输入指令:systemctl sta ...
- Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试
场景 MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的" ...
- php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. php对接AliGenie天猫精灵服务器控制智能硬件esp82 ...
- 从零开始开发物联网项目(1)——mqtt服务器搭建
去年开发了一个物联网的项目,入了很多坑,花了很多时间,不过最后终于做出了一个初代版本,也算完成了项目.为了避免自己遗忘,也为了让有兴趣学习物联网的同学少入点坑,我整理了一下,写成一个系列教程.通过这个 ...
- Mqtt开发笔记:Mqtt服务器搭建
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- MQTT服务器搭建和测试步骤及遇见的问题
MQTT服务器搭建和测试步骤及遇见的问题 前言:MQTT服务器有好多种,查看:Servers/Brokers Apache-Apollo:一个代理服务器,在ActiveMQ基础上发展而来,可以支持ST ...
- 阿里云MQTT服务器搭建与测试(全图文,非常详细)
阿里云MQTT服务器搭建与测试 一. MQTT概念 二. 阿里云MQTT服务器搭建 1 阿里云平台注册及认证 2 添加平台 2 创建产品与设备 获取MQTT连接相关信息 三.MQTT.fx测试 1 M ...
- 基于ZigBee的智能家居设计与实现—MQTT服务器搭建+APP开发
目录 MQTT服务器搭建 APP开发 易安卓环境搭建 易安卓基础介绍 关于易安卓 新建工程 界面介绍 易安卓使用到的操作演示 易语言使用到的语法演示 MQTT实现 MQTT组件介绍与添加 重点介绍 A ...
最新文章
- html 如何实现一条竖线边上有 刻度_记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选...
- .NET Core程序中使用User Secrets存储敏感数据
- c++ string 字符串
- 06-密码学基础-混合密码系统
- Thanks, TuSimple!
- ado.net 插入一条数据
- LR 监控mysql
- 不能说的秘密-重载、重写与继承中的构造方法
- vecm模型怎么写系数_时变秩和时变系数VECM模型与“费雪效应”机制检验
- java POI excel导出自定义分页问题
- ios storyboard 传参 返回传参(segue)
- UVA 177 PaperFolding 折纸痕 (分形,递归)
- 小鑫鑫的平均分(排序问题)
- PSNR SSIM BD-rate BD-PSNR
- 云计算与大数据考试重点
- stata怎么画分类图_Stata中的图形制作(绝对自己总结)
- 超级白熊啤酒虎年限定礼盒正式发售;迪桑特限量发售新款针织滑雪服 | 知消...
- QQ防红跳转PHP代码,最新版防红代码!完虐市场上所有防红!!仅需一段代码在QQ打开任意网址即可跳转...
- 腾讯云轻量应用服务器卡死怎么连接?
- 要求输出事故报告,线上日志文件却不见了!!