热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SwooleMQTT(物联网)服务器环境搭建(一)

本文采用[Docker]方式来搭建,对于[Docker]的使用或者一些知识有另一篇文章(

本文采用[Docker]方式来搭建,对于[Docker]的使用或者一些知识有另一篇文章(暂未写好)来介绍,这里仅说明如何使用[Docker]进行[MQTT]的搭建。
首先搜索一下[Swoole]的镜像

    wonmodeair:~ wonmo$ docker search swoole
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    phpswoole/swoole Official Docker image for PHP Swoole : https… 75
    twosee/swoole-coroutine Perfect Swoole Dockerfile for senior develop… 44 [OK]
    twosee/swoole Perfect Swoole Dockerfile for senior develop… 14 [OK]
    kakuilan/swoole-docker                   php7 swoole docker                              2

    这里选取了第一个镜像,现在将镜像下载下来。

      docker pull phpswoole/swoole

      下载过程就不贴了,主要是一些镜像层的下载合并。然后根据这个镜像启动一个容器。

        docker run --rm -t -i --name swoole -p 9503:9503 -v Users/wonmo/Desktop/docker_volumes/swoole:/var/www phpswoole/swoole:latest bin/bash

        这里要映射一个本地目录到容器里,命令的话会专门写一篇[Docker]文章进行解释。像这样[Swoole]的环境就搭建好了,剩下的我们需要进行[MQTT]包的安装。

          composer create-project simple-swoole/skeleton swoole

          在容器里运行上述命令就会在本地目录创建一个[Swoole]文件夹,里面包含了一个简单的[WebSocket]实现例子,这里由于需要进行[MQTT]的实现,所以需要增加一些代码。

          在增加代码前我们先执行以下命令

            composer require simps/mqtt

            打开本地目录下的[.../swoole/simps/config/servers.php]文件,增加如下代码。

              use Simps\Server\Protocol\MQTT; #注意别忘了命名空间
              'mqtt' => [
              'ip' => '0.0.0.0',
              'port' => 9503,
              'callbacks' => [
              ],
              'receiveCallbacks' => [
              MQTT::COnNECT=> [\App\Events\MqttServer::class, 'onMqConnect'],
              MQTT::PINGREQ => [\App\Events\MqttServer::class, 'onMqPingreq'],
              MQTT::DISCOnNECT=> [\App\Events\MqttServer::class, 'onMqDisconnect'],
              MQTT::PUBLISH => [\App\Events\MqttServer::class, 'onMqPublish'],
              MQTT::SUBSCRIBE => [\App\Events\MqttServer::class, 'onMqSubscribe'],
              MQTT::UNSUBSCRIBE => [\App\Events\MqttServer::class, 'onMqUnsubscribe'],
              ],
              'settings' => [
              'worker_num' => 1,
              'open_mqtt_protocol' => true,
              ],
              ],

              然后在[Events]文件夹增加[MqttServer.php]文件。




                declare(strict_types=1);
                /**
                * This file is part of Simps.
                *
                * @link https://simps.io
                * @document https://doc.simps.io
                * @license https://github.com/simple-swoole/simps/blob/master/LICENSE
                */


                namespace App\Events;


                use Simps\Server\Protocol\MQTT;
                use Simps\Server\Protocol\MqttInterface;


                class MqttServer implements MqttInterface
                {
                public function onMqConnect($server, int $fd, $fromId, $data)
                {
                if ($data['protocol_name'] != "MQTT") {
                // 如果协议名不正确服务端可以断开客户端的连接,也可以按照某些其它规范继续处理CONNECT报文
                $server->close($fd);
                return false;
                }


                $server->send(
                $fd,
                MQTT::getAck(
                [
                'cmd' => 2, // CONNACK固定值为2
                'code' => 0, // 连接返回码 0表示连接已被服务端接受
                'session_present' => 0
                ]
                )
                );
                }


                public function onMqPingreq($server, int $fd, $fromId, $data): bool{
                return true;
                }


                public function onMqDisconnect($server, int $fd, $fromId, $data): bool{
                return true;
                }


                public function onMqPublish($server, int $fd, $fromId, $data){
                var_dump($data);
                }


                public function onMqSubscribe($server, int $fd, $fromId, $data){}


                public function onMqUnsubscribe($server, int $fd, $fromId, $data){}


                }

                开启[Swoole]服务

                  php bin/simps.php mqtt:start

                    root@3064ee6c19e8:/var/www/simps# php bin/simps.php mqtt:start
                    ____ _
                    ___| (_) _ __ ___ _ __ ___
                    \___ \ | | | '_ ` _ \ | '_ \ __|
                    ___) | | | | | | | | | | |_) | \__ \
                    |____/ |_| |_| |_| |_| | .__/ |___/
                    |_| Version: 1.0.5, Swoole: 4.7.1


                    [2021-08-21 13:32:17] [INFO] Swoole MQTT Server running:mqtt://0.0.0.0:9503

                    开启成功以后可以使用[MQTT]相关的工具进行连接测试,这里我用了[MQTT.FX]。网上有推荐[MQTTBox]的,但是我没有找到下载地址,然后去[GitHub]上下载了一份源码,编译了一下。发现是个[Web App]不支持[MQTT]。

                      MQTT over TCP and TLS are supported by MQTTBox apps for Linux, MAC and Windows. Download MQTTBox app from http://workswithweb.com/mqttbox.html

                      [MQTT.FX]还是比较简单的,进行配置以后发送个简单的文本。

                        root@3064ee6c19e8:/var/www/simps# php bin/simps.php mqtt:start
                        ____ _
                        ___| (_) _ __ ___ _ __ ___
                        \___ \ | | | '_ ` _ \ | '_ \ / __|
                        ___) | | | | | | | | | | |_) | \__ \
                        |____/ |_| |_| |_| |_| | .__/ |___/
                        |_| Version: 1.0.5, Swoole: 4.7.1


                        [2021-08-21 13:39:48] [INFO] Swoole MQTT Server running:mqtt://0.0.0.0:9503
                        array(6) {
                        ["cmd"]=>
                        int(3)
                        ["topic"]=>
                        string(12) "上下博客"
                        ["content"]=>
                        string(0) ""
                        ["dup"]=>
                        int(0)
                        ["qos"]=>
                        int(0)
                        ["retain"]=>
                        int(0)
                        }

                        此篇文章仅仅只是搭建,如果需要知道[MQTT]详细的内容,请关注后续。

                        ... 未完待续 ...





                        推荐阅读
                        • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
                        • 探索OpenWrt中的LuCI框架
                          本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
                        • IntelliJ IDEA配置微服务启动显示
                          通过编辑IntelliJ IDEA的workspace.xml文件,可以实现微服务启动对象的显示。具体步骤包括定位并修改workspace.xml中的RunDashboard部分。 ... [详细]
                        • 本文详细介绍了如何在VSCode环境中配置Prettier工具以支持TypeScript项目,同时结合ESLint实现代码风格的一致性和自动化格式化。 ... [详细]
                        • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
                        • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
                        • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
                        • 宝塔面板下启用HTTPS的详细指南
                          本文提供了在宝塔面板环境中配置HTTPS的具体步骤,确保您的网站通信更加安全可靠。 ... [详细]
                        • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
                        • Docker基础入门与环境配置指南
                          本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
                        • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
                        • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
                        • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
                        • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
                        • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
                        author-avatar
                        mobiledu2502928897
                        这个家伙很懒,什么也没留下!
                        PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                        Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有