MQTT服务器开发:实现高效的物联网通信 (mqtt 服务器开发)
AB资源网 2023-09-19 21:55 3823 浏览 0 评论
随着物联网技术的快速发展和广泛应用,对于物联网通信的需求也越来越重要。MQTT(Message Queuing Telemetry Transport)协议是一种轻量级、可靠、灵活的消息协议,它能够在物联网中实现高效的通信。本文将介绍MQTT服务器的开发过程,以及如何利用MQTT协议实现高效的物联网通信。

一、MQTT协议的特点
MQTT协议是一种基于发布/订阅机制的消息协议,它具有以下特点:
1. 轻量级:MQTT协议的设计初衷就是为了在低带宽、不稳定的网络环境中传输数据,因此它采用了轻量级的封装方式,使得它的开销非常小,能够更好的适应物联网的需求;
2. 可靠性高:MQTT协议采用了QoS机制,即消息传输的质量保证,可以根据不同的应用场景选择不同的QoS等级,从而保证消息的可靠性;
3. 灵活性强:MQTT协议不仅能够支持不同的消息格式和内容,还可以支持多种消息传输方式,从而满足不同的业务需求;
4. 易于扩展:MQTT协议采用了发布/订阅机制,使得客户端可以自主选择订阅自己感兴趣的消息主题,在服务端不需要额外的配置和管理,从而使得系统的扩展非常容易;
5. 安全性高:MQTT协议支持用户身份验证、加密传输等多项安全机制,可以为物联网应用提供更高级的安全保障。
二、MQTT服务器的开发过程
MQTT服务器在物联网应用中扮演着核心的角色,它负责消息的接收、存储和转发,提供高效的通信服务。下面我们来看看MQTT服务器的开发过程:
1. 确定开发语言和框架:MQTT服务器可以用多种编程语言和框架进行开发,如Java、Python、Node.js等。根据自己的特点和需求来选择合适的编程语言和框架。
2. 设计数据库:MQTT服务器需要存储订阅信息、客户端信息、消息等数据,因此要设计合适的数据库结构,以便于数据的存储和管理。
3. 开发服务端程序:MQTT服务器的核心是服务端程序,它需要负责接收客户端连接、管理客户端订阅信息和消息、处理请求等。在开发服务端程序的过程中,要考虑到多线程和并发处理、QoS等因素。
4. 实现客户端连接和订阅:MQTT协议支持多种客户端连接方式,如TCP、SSL等。在MQTT服务器的开发过程中,要实现客户端的连接和订阅功能,包括连接接受请求、订阅主题、发布消息等操作。
5. 实现消息存储和转发:MQTT协议支持多种消息传输方式,如内存传输、文件传输、数据库存储等。在MQTT服务器的开发过程中,要实现消息存储和转发功能,以便于客户端可以及时接收到消息。
6. 实现安全验证:MQTT协议提供了多种安全机制,如用户名密码验证、TLS加密传输等。在MQTT服务器的开发过程中,要实现安全验证功能,以保障物联网应用的安全性。
三、利用MQTT协议实现高效的物联网通信
MQTT协议的特点和MQTT服务器的开发过程为物联网通信提供了优秀的支持。下面我们来看看如何利用MQTT协议实现高效的物联网通信:
1. 实现实时监控:利用MQTT协议,可以快速实现物联网设备的实时监控,如温度、湿度、压力等环境参数的实时采集、传输和展示,从而实现对物联网设备的高效管理和运维。
2. 实现智能控制:利用MQTT协议,可以将控制指令快速传输给物联网设备,实现物联网设备的智能控制,如智能家居的远程控制、智能工厂的设备自动化控制等。
3. 实现大数据分析:利用MQTT协议,可以将物联网产生的大数据快速传输到云端,并利用云计算和大数据技术进行大数据分析和挖掘,从而实现更深层次的数据应用和价值创造。
4. 实现智能预测:根据物联网设备产生的数据,可以利用机器学习和技术进行数据分析和预测,从而实现对物联网设备的智能预测和预警,提升设备运行效率和可靠性。
本文介绍了MQTT协议的特点、MQTT服务器的开发过程以及利用MQTT协议实现高效的物联网通信的方法。MQTT协议作为一种轻量级、可靠、灵活的消息协议,已经在物联网应用中得到广泛应用。随着物联网技术的不断发展和创新,MQTT协议仍将发挥越来越重要的作用,为物联网通信提供更高效的支持和保障。
相关问题拓展阅读:
- mqtt协议和http协议区别
- 面试笔记-Socket MQTT Websocket
- 如何在 JMeter 中使用 MQTT 插件
mqtt协议和http协议区别
1、吞吐量不同
根据3G网络的测量结果MQTT的吞吐量比HTTP快93倍。
2、架构不同
MQTT适用于发布、订阅模型;HTTP适用于请求、响应模型告和陪。
3、协议设计不同
MQTT协议的设计是以数据为中心的;HTTP协议的设计是以文档为中心的。
4、复杂性和消息大小不同
MQTT具有袜蠢相当短的规范。只有CONNECT,PUBLISH,SUBSCRIBE,UNSUBSCRIBE和DISCONNECT类型对开发人员很重要。而HTTP规范要长得多。
MQTT具有非常短的消息头,并且最小的包消息大小为2个字节。通过HTTP协议使用文本消息格式允许它组成冗长的标题和消息。它有助于消除麻烦,因为它可以被人类阅读,但同时它对于资源受限的设备是不必要的。
5、标头大小不同
MQTT是2个字棚租节;HTTP适用于80或8080端口。
6、数据安全不同
MQTT通过SSL/TLS提供数据安全;HTTP不提供安全性,但Https就是为此而构建的。
MQTT 和 HTTP 协议的区别。
1.消息队列遥测传输(MQTT)。
它是由 Andy Standford-Clark 和 Arlen Nipper 创建的。它是基于发布/订阅模型的物联网交互协派山议。该模型是一个简单的模型,提供对 QoS(服务质量)的支持。由于它的能力,它圆羡悔可以在每秒基于物联网的设备中找到。该协议具有许多特性,因为它通过 TCP 并使用 SSL/TLS 来确保安全。对于服务器之间的消息传递,它使用 CONNECT、PUBLISH、SUBSCRIBE、DISCONNECT 等。
2. 超文本传输协议(HTTP)
万维网 (WWW) 使用它来定义其消息将如何传输和格式化。该协议负责服务器在通过网络发送信息时必须采取的操作。当 URL 被输入浏览器时,该协议向服务器发送 HTTP 请求,然后将 HTTP 响应发送回浏览器。该协议还负责控制万维网上网页的格式和表示。
MQTT的特点:
发布/订阅消息模橘正式,提供一对多的消息发布,解除应用程序耦合。这一点很类似于1. 这里是列表文本XMPP,但是MQTT的信息冗余远小于XMPP。
对负载内容屏蔽的消息传输。
使用TCP/IP提供网络连接。主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
面试笔记-Socket MQTT Websocket
1.Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
2.MQTT协议是应用层协议不依赖长连接,适合弱网络。通过topic缓存信息。符合物联网设备的使用场景。因为通过topic缓存信息,因此可以实现通过topic与多个端的一对多连接,而不是设备与设备的多对多连接,节省了能耗及带宽。
MQTT的心跳,及非信息的报文,较Websocket更少,更节省带宽及能耗。更适用于物理网的多种网络协议。
3.WebSocket和Http一样在应用层,提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。 本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。
Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:
(1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
(2) 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;
(3) 连接确认:当服务器套接字收到客搭顷饥户端套接字发来的请求后,就响应客知返户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.
Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。
很多情况下,都乎缺是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。
若双方是 Socket 连接,可以由服务器直接向客户端发送数据。
若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。
因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。
例如:
①网络代价昂贵,带宽低、不可靠。
②在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
①使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 ②对负载内容屏蔽的消息传输。
③使用 TCP/IP 提供网络连接。
④有三种消息发布服务质量:
⑤”至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
⑥”至少一次”,确保消息到达,但消息重复可能会发生。
⑦”只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
⑧小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
⑨使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。qos=0
“至少一次”,确保消息到达,但消息重复可能会发生。qos=1
“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种更高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。qos=2
Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:
固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。
WebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。 本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。 由此可知两者的应用场景不一样: MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等等。 WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的Server Push、Comet、长轮询等老旧实现。 两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备消息或者向设备发送信息,那么MQTT over WebSocket自然成了最合理的途径了。
如何在 JMeter 中使用 MQTT 插件
JMeter 内置 HTTP/HTTPS、TCP 等支持多种协议,还具备插件扩展机制。
MQTT 协议作为物联网界的主流协议,虽然并非 JMeter 自带的协议类型,但在物联网测试场景中极为普遍。为了支持 MQTT 协议的规模测试,EMQ 映云科技开发了基于 JMeter 的 MQTT 协议开源测试插件: 。
经过几个版本的迭代,目前 JMeter MQTT 插件的最新版本为 2.0.2,支持连接、消息发布、消息订阅等多种采样器,并可通过组合构建更复杂的测试场景。
本文我们将具体介绍如何在 JMeter 中使用 MQTT 插件。
MQTT 插件的安装方式与其他 JMeter 第三方插件类似。
连渗盯接采样器模拟物联网设备,发起 MQTT 连接。
Server name or IP:
指向被测 MQTT 服务器地址。
Port number:
以 EMQ X 为例,默认 TCP 连接的端口是 1883, SSL 连接则是 8883。具体的端口请参照服务器的具体配置。
MQTT version
: 目前支持 MQTT 3.1及3.1.1版本。
Timeout:
连接超时设置,以秒为单位。
Protocols:
支持TCP、SSL、WS 和 WSS 方式连接 MQTT 服务器。当选择 SSL 或 WSS 加密通道连接时,可以选择单向或者双向认证(Dual)。如果希望进行双向认证,还需要指定相应的客户端证书(p12证书),以及对应的文件保护密码(Secret)。
User authentication:
如果 MQTT 服务器配置了用户认证,需要提供相应的用户名(
User name
)和密码(
Password
)。
ClientId:
虚拟用户的标识。如果勾选了「Add random suffix for ClientId」,将会在 ClientId 的基础上给每个虚拟用户再添加一个 uuid 串作为后缀,整个作为虚拟用户标识。
Keep alive(s):
心跳信号发送间隔。例如,300 表示客户端每隔 300 秒向服务器发出 ping 请求,以保持连接活跃。
Connect attempt max:
之一次连接过程中,尝试重连的更大次数。超过该次数则认为连接失败。如果希望一直尝试重连,可以设为 -1。
Reconnect attempt max:
后继连接过程中,尝试重连的更大次数。超过该次数则认为连接失败。如果希望一直尝试重连,可以设为 -1。
Clean session
: 如果希望在连接之间保留会话状态,可以将该选项设为 false。如果不希望在新的连接中保留会话状态,则将该项设为true。
消息发布采样器复用连接采样器中建立的 MQTT 连接,向目标 MQTT 服务器发布消息。
QoS Level:
服务质量,取值为 0,1,2,分铅孙别代表 MQTT 协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACT_ONCE)
Retained messages
: 如果希望使用「保留消息」,可将该选项设为 true,MQTT 服务器端将会存储插件发布的保留消息及其 QoS,并在相应 topic 上发生订阅时,直接将最后一条保留消息投递给订阅端,使得订阅端不必等待即可获取发布端的最新状态值。
Topic name:
发布消息所丛激和属的主题。
Add timestamp in payload:
如果勾选,发布的消息体开头会附带当前时间戳,配合消息订阅采样器的 Payload includes timestamp 选项,可以在消息接收端计算消息达到的延时。如果不勾选则只发送实际的消息体。
Payloads
Message type:
目前支持三种消息类型
消息发布采样器复用连接采样器中建立的 MQTT 连接,从目标 MQTT 服务器上订阅消息。
QoS Level:
服务质量,含义与消息发布采样器相同。
Topic name(s):
订阅消息所属的主题。支持单个消息订阅采样器订阅多个主题,主题之间用逗号分隔。
Payload includes timestamp:
如果勾选,会从消息体开头处解析发送时间戳,配合消息发布采样器的 Add timestamp in payload 选项,可以用于计算消息的接收延时。如果不勾选则只解析实际的消息体。
Sample on
: 采样方式,默认为”
specified elapsed time(ms)
“,即每隔指定的毫秒时间采样一次。也可以选择”
number of received messages
“,即每接收到指定的消息数采样一次。
Debug response:
如果勾选,消息内容会打印在 JMeter 的响应结果中。该选项主要用于调试目的,正式运行测试不建议勾选,以免影响测试效率。
断开连接采样器中建立的 MQTT 连接。
本文我们介绍了 JMeter MQTT 插件的各测试组件,在下期文章中我们将针对不同的测试场景详细介绍如何用 MQTT 插件来构建测试脚本。
mqtt 服务器开发的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mqtt 服务器开发,MQTT服务器开发:实现高效的物联网通信,mqtt协议和http协议区别,面试笔记-Socket MQTT Websocket,如何在 JMeter 中使用 MQTT 插件的信息别忘了在本站进行查找喔。
相关推荐
- 云主机FTP软件:高效传输与安全管理的一站式解决方案
-
在云计算时代,云主机已成为企业和个人用户托管应用和存储数据的首选。为了方便文件传输,FTP(文件传输协议)软件在云主机环境中扮演着重要角色。本文将详细介绍如何在云主机上配置和使用FTP软件...
- 云主机FP:引领未来计算,解锁无限可能
-
云主机FP(FloatingPoint)是指在云计算环境中,针对浮点运算性能进行优化的虚拟机实例。浮点运算在科学计算、工程模拟、金融建模、图形处理等领域中占据重要地位,因此云主机FP的设计和配置...
- 云主机ECS:解锁企业数字化转型的新引擎,高效、安全、灵活的云计算解决方案
-
云主机ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它允许用户在云端创建和管理虚拟机实例。ECS的核心优势在于其灵活性和可扩展性,能够满足各种规模和类型的业...
- 云主机D盘:解锁无限存储空间,轻松应对大数据挑战!
-
云主机是一种基于云计算技术的虚拟化服务器,它允许用户在云平台上创建、配置和管理虚拟机实例。在云主机中,磁盘分区是存储数据的关键部分,通常包括系统盘和数据盘。系统盘用于安装操作系统和运行应用...
- 云主机DNS解析:提升网站速度与稳定性的关键策略
-
云主机DNS(DomainNameSystem)是云计算环境中至关重要的一部分,它负责将域名转换为IP地址,从而使得用户能够通过易于记忆的域名访问云主机上的服务和应用。本文将深入探讨云主机DNS...
- 云主机C盘爆满?快速解决方法大揭秘,让你的服务器重获新生!
-
云主机C盘满了是一个常见但棘手的问题,尤其对于依赖云服务进行日常运营的企业和个人用户来说,这可能导致系统性能下降、应用程序崩溃,甚至数据丢失。本文将详细探讨云主机C盘满的原因、影响以及解决方法。...
- 云主机CPU选择指南:提升性能与效率的关键决策
-
在选择云主机的CPU时,用户需要考虑多个因素,以确保所选的CPU能够满足其应用的需求,同时优化成本效益。以下是一些关键点,帮助用户在云主机CPU选择过程中做出明智的决策。了解应用的性能需求...
- 云主机CPU性能大比拼:揭秘顶级云服务商的核心竞争力
-
云主机CPU是云计算环境中至关重要的组成部分,它直接影响着云服务的性能、稳定性和用户体验。CPU,即中央处理器,是计算机系统的核心,负责执行指令和处理数据。在云主机中,CPU的性能决定了虚...
- 云主机ASP:高效搭建动态网站,轻松实现业务扩展与性能优化
-
云主机ASP(ActiveServerPages)是一种在云环境中运行ASP应用程序的技术。ASP是一种由微软开发的动态网页技术,允许开发者使用VBScript或JScript等脚本语言编写服务...
- 云主机API:解锁无限可能,引领企业数字化转型新纪元
-
云主机API(ApplicationProgrammingInterface)是云计算服务提供商为用户提供的一种编程接口,允许开发者通过编程方式管理和操作云主机资源。这些API通常基于RESTf...
- 云主机99idc:高效稳定,轻松搭建您的专属云端空间,一键部署,畅享无限可能!
-
云主机99idc是一家专注于提供云计算服务的公司,其核心业务是为企业和个人用户提供高性能、高可靠性的云主机服务。随着数字化转型的加速,云计算已经成为企业IT基础设施的重要组成部分,而云主机99i...
- 云主机80端口:解锁无限可能,开启高效网络新时代!
-
云主机是一种基于云计算技术的虚拟化服务器,它通过互联网提供计算资源和服务。在云主机中,80端口是一个非常重要的端口,通常用于HTTP协议,即网页服务。本文将详细探讨云主机80端口的相关内容...
- 云主机403错误:解锁高效解决方案,提升网站性能与安全
-
云主机403错误是一个常见的网络问题,通常表示用户在尝试访问某个资源时被服务器拒绝。这种错误可能由多种原因引起,包括权限问题、配置错误、防火墙设置等。以下是关于云主机403错误的一些详细信...
- 云主机360:全方位云端解决方案,助力企业数字化转型无忧
-
云主机360是一种基于云计算技术的虚拟化服务器解决方案,它通过将物理服务器资源虚拟化,为用户提供灵活、高效、安全的计算服务。云主机360的核心优势在于其高度的可扩展性和弹性,用户可以根据业务需求...
- 云主机301:引领未来云计算的新纪元,高效稳定,助力企业数字化转型!
-
云主机301是一种常见的网络重定向状态码,通常用于指示用户请求的资源已被永久移动到新的URL。在云计算环境中,云主机301状态码的出现可能涉及到多种技术和管理策略,下面我们将详细探讨这一现象。...
你 发表评论:
欢迎- 一周热门
-
-
大网数据:双12秒杀聚惠,湖北100G高防云低至0元/月,湖北独服务器低至210元、200G高防+50Mbps带宽
-
HostYun廉价洛杉矶三网回程CN2 GIA云服务器内测13元/月起(美国原生IP,去程10Gbps防御)
-
HostYun洛杉矶大硬盘云服务器9折22.5元/月起(240G-500G硬盘/1Gbps/10G防御)
-
樊云香港双程CN2及洛杉矶50G高防三网CN2 GIA云服务器9折22.5元/月起
-
大网数据、湖北高防云服务器低至39元/月起、湖北高防独服务器低至245元起(200G硬防、金盾+傲盾防CC)
-
spinservers圣何塞/达拉斯10Gbps带宽高配服务器月付89美元起
-
高防服务器大网数据湖北独服务器低至210元、200G高防+50Mbps带宽
-
tmhhost美国高防云服务器8折_CeRaNetworks机房/三网cn2直连/适合建站
-
DogYun新上韩国独立服务器,E5/SSD+NVMe优惠后300元/月,自动化上架
-
初忆云 – 2020年中云聚惠全场五折 BGP云服务器低至88/年,抓紧上车
-
- 互动交流
- 标签列表
- 最新评论
-
您的文章条理清晰,论述有据,说服力强。您的文章情感真挚,能够触动人心,引起共鸣。https://www.renhehui.com/renhehui/1479.h
沉醉于月色 评论于:08-09虚拟机部署好后跟物理机一样当服务器的,只是它依赖了本地物理机不要关机为前提。对于外网访问内网场景,本地内网搭建服务器后需要提供到互联网上连接访问的,比较简便的
访客 评论于:03-01刘中宜 评论于:11-01
访客 评论于:06-03
AB资源网 评论于:05-08
AB资源网 评论于:11-22
AB资源网 评论于:11-22
頹廢了悲伤 评论于:11-15
南风知我意 评论于:11-15
心若冰凝 评论于:11-15