使用MQTT协议+Redis缓存实现APP登录顶号功能

本文介绍了一种使用MQTT协议和Redis缓存实现APP登录顶号功能的方法。通过记录设备信息并存储在Redis中,当新设备登录同一账号时,更新Redis中的信息并发送下线通知给旧设备。文章详细讲解了Linux下Apollo MQTT服务器和Redis的安装配置,并概述了后台接口和App端的实现逻辑。
摘要由CSDN通过智能技术生成

大家在玩游戏或使用QQ等IM工具时,想必都见到过弹出被顶号或者是您的账号于xx时间在另一设备登录,您已被迫下线这样的提示,然后不得不点退出按钮退出整个应用,或者点击重新登录把另一设备再顶下来。最近我参与的一个项目,正好就有这样的需求,而且,由于我们项目中已经使用到了MQTT协议进行消息推送,实现远程控制,后台用Java实现,缓存使用了Redis,因此,正好可以利用现有的技术来实现这个功能。

实现的思路大概如下:首先,登录时不仅需要账号密码,还可以将设备关键信息记录下来,如设备型号(Android|iPhone)、登录时间、登录IP、设备唯一标识(UUID)等,这就需要前台登录功能与后台接口一起配合实现,并在后台把userId已经相关设备信息保存到Redis中,当在另外一台新设备上登录同一帐号时,将userId对应的相关登录设备信息直接进行覆盖,此时如果旧设备进行重连时,因为该uuid已经不是当前服务端的uuid了,所以直接返回下线通知,为了进行友好提示,也可以将新登录设备的主要信息(设备型号、登录时间)进行返回。

下面简单介绍一下实现的方法。

软件安装

Linux下mqtt服务器Apollo的安装

下载

选择一个目录用来下载保存
下载地址: http://activemq.apache.org/apollo/download.html
官网教程: http://activemq.apache.org/apollo/documentation/getting-started.html
目前版本是 apache-apollo-1.7.1-unix-distro.tar .gz

创建broker

一个broker实例是一个文件夹,其中包含所有的配置文件及运行时的数据,不如日志和消息数
据。Apollo强烈建议不要把实例同安装文件放在一起。在linux操作系统下面,建议将实例建在
/var/lib/目录下面

首先解压:tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz
选择一个目录存放解压后的文件,我放在了/server/下,解压后的文件夹为 apache-apollo-1.7.1

开始创建broker实例:

cd /var/lib
sudo /server/apache-apollo-1.7.1/bin/apollo create mybroker

下图是Apache官方给的一些建议截图:

这里写图片描述

启动broker实例

启动broker实例可以有两种方法,如下图中所示:

这里写图片描述

可以执行

/var/lib/mybroker/bin/apollo-broker run

或者

sudo ln -s "/var/lib/mybroker/bin/apollo-broker-service" /etc/init.d/
/etc/init.d/apollo-broker-service start

使其作为一个service进行启动,以后系统重启后只需运行/etc/init.d/apollo-broker-service start

访问Apollo的监控页面: http://localhost:61680/ 默认用户名、密码为为 admin/password

Linux下Redis的安装与配置

Redis的安装非常简单,已经有现成的Makefile文件,解压后在src目录下使用make命令完成编译即可,redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个 redis.conf 就构成了整个redis的最终可用包。它们的作用如下:

redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况

下载安装:
wget http://download.redis.io/redis-stable.tar.gz  
tar xzf redis-stable.tar.gz  
cd redis-stable  
make
make install
启动

编译后生成的可执行文件:
redis-server 是Redis的服务器,启动Redis即运行redis-server
redis-cli 是Redis自带的Redis命令行客户端,学习Redis的重要工具

./redis-server & 不指定配置直接运行,这时采用默认配置,无密码
./redis-server –port 6379 仅指定端口
./redis-server ../redis.conf 指定配置文件

最好还是使用最后一种方式进行启动

如果只是在本机连接,那麽使用默认配置文件不会有什么问题,但是,如果是连接远程服务器端的Redis,则需要对配置文件进行一些修改:

requirepass foobared
#bind 127.0.0.1    ##注释掉
protected-mode no  ##从yes改成no
### 回答1: STM32是一款性能优异、功能强大的微控制器。要搭建mqtt_stm32 mqtt协议功能,我们需要先了解MQTT协议MQTT是一种基于发布/订阅模式的轻量级物联网通信协议,可以用于物联网设备之间的互联。 在STM32上实现MQTT协议,我们需要先下载MQTT库文件,并将其导入到STM32工程中。然后,我们可以使用MQTT API函数进行mqtt协议功能实现MQTT API函数有连接、订阅、发布等多种功能,并可以根据不同的需求进行二次开发。例如,可以实现定时发布数据、自动连接网络等功能。 在实现mqtt_stm32 mqtt协议功能时,我们需要注意以下几点:首先,要确保使用MQTT库文件版本能够适配当前的STM32芯片;其次,要根据具体的应用场景选择MQTT服务端,而且要保证连接稳定性和安全性;最后,要注意消息质量的控制,如保证消息的可靠传输、避免消息重复发送等。 总结来说,搭建mqtt_stm32 mqtt协议功能需要掌握MQTT协议的基本知识以及使用MQTT库文件和API函数进行开发的技能。通过不断地实践和优化,我们可以实现高效、稳定、安全的mqtt协议功能,在物联网应用中发挥巨大的作用。 ### 回答2: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的消息传输协议,适合于物联网设备和低带宽、不可靠网络的通信。STM32是一款嵌入式微控制器芯片,具有广泛的应用领域和丰富的外设接口,可以方便地搭建MQTT通信功能。下面介绍STM32搭建MQTT协议功能实现的几个关键步骤。 第一步,选择合适的MQTT库。市面上有很多MQTT库可以选择,如Eclipse Paho MQTT、Mosquitto MQTT等。在选择时应根据自身需求选择相应的库。例如,对于运行在STM32上的MQTT客户端应用程序,可以选择具有小内存占用和低功耗特性的Paho MQTT库。 第二步,配置MQTT参数。 MQTT协议中需要配置一些参数来定义客户端唯一标识符和连接的服务器地址等。对于STM32,可以通过定义宏和结构体来配置这些参数。例如,可以定义一个MQTT_InitTypeDef结构体,用于保存MQTT连接配置参数,以便在连接函数中传递。 第三步,编写MQTT连接功能。STM32通过与MQTT服务器建立TCP连接来实现MQTT通信。可以编写一个连接函数,用于初始化TCP连接并完成MQTT连接握手。在连接握手后,STM32可以使用MQTT Pub/Sub发布/订阅功能来进行数据传输。 第四步,编写数据传输功能。在STM32上,可以使用MQTT客户端API发送和接收MQTT消息。例如,可以编写一个数据发送函数,用于MQTT Pub数据,将数据传输到MQTT中心服务器。同时,还可以编写一个数据接收函数,用于MQTT Sub数据,从MQTT中心服务器接收数据。 第五步,应用其他STM32外设。STM32还可以与其他外设结合使用,例如通信模块、传感器等,实现更多应用场景。例如,可以使用STM32 ADC采集传感器数据,并通过MQTT发布到MQTT服务器。 通过以上几个步骤,可以快速搭建STM32 MQTT功能。但需要注意的是,MQTT协议通信需要考虑网络环境、数据传输安全性等问题,需要进行充分测试和验证,才能确保可靠运行。 ### 回答3: STM32是一种微控制器,可以用来实现MQTT协议MQTT是一种轻量级的消息协议,适用于物联网应用程序。它可以在较低带宽和不稳定的网络中实现可靠的通信,并且可以在设备之间传输小量的数据。在本文中,我们将学习如何在STM32上构建MQTT实现MQTT协议功能。 首先,我们需要准备一些材料: 1. STM32微控制器 2. MQTT库 3. MQTT服务器 4. 一些连接材料 然后,我们需要安装所需的库文件并设置MQTT服务器。我们可以使用Eclipse或Keil等软件进行开发。 在我们开始构建MQTT之前,我们需要了解一些MQTT协议的关键概念。 1. 代理 代理是一个程序,它可以接收消息并将消息传递给其他代理或设备。在MQTT中,代理可以是客户端,服务器或代理。 2. 主题 主题是消息的地址或标识符。客户端将消息发送到特定主题,并且服务器也会订阅特定主题以接收消息。 3. QoS QoS是消息传递的服务质量等级。在MQTT中,可以使用0、1或2级QoS。 4. 订阅 订阅是客户端将主题与服务器连接的过程。一旦客户端订阅了主题,它就可以接收到该主题的消息。 5. 发布 发布是客户端向服务器发送消息的过程。 接着,我们需要编写代码实现MQTT协议功能。我们可以使用MQTT库API来实现。根据我们的需求,我们可以使用3个级别的QoS来发送和接收消息。 最后,我们连接STM32到MQTT服务器并测试。我们可以从服务器向设备发送消息并检查设备是否正确接收消息。 总之,STM32可以很容易地实现MQTT协议功能使用MQTT,我们可以建立可靠的连接,并在低带宽和不稳定的网络中进行消息传递。这种技术在物联网应用程序中非常实用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值