热门标签 | 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]详细的内容,请关注后续。

                        ... 未完待续 ...





                        推荐阅读
                        • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
                        • MySQL5.6.40在CentOS764下安装过程 ... [详细]
                        • 支持composer的php,composer配置
                          本文目录一览:1、PHP与composer结合-使用命名空间实现文件自动加载 ... [详细]
                        • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
                        • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
                        • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
                        • python3 nmap函数简介及使用方法
                          本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
                        • 微信民众号商城/小顺序商城开源项目介绍及使用教程
                          本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
                        • 程序员如何选择机械键盘轴体?红轴和茶轴对比
                          本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
                        • C语言自带的快排和二分查找
                          Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
                        • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
                        • 1、DashAPI文档Dash是一个API文档浏览器,使用户可以使用离线功能即时搜索无数API。程序员使用Dash可访问iOS,MacOS, ... [详细]
                        • 如何通过swoole加速laravel的问题?
                          这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
                        • Docker安装Rabbitmq(配合宝塔)
                          篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
                        • Harbor安装快速简单安装(易用)
                          在网上下载docker-compose工具。[rootdocker01~]#wgethttps:github.comdockercomposereleasestag1.24.0- ... [详细]
                        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社区 版权所有