为什么用MQTT不用TCP长连接透传 | 文章

前言在接触到MQTT之后,总是会有疑问,为什么用MQTT不用TCP长连接透传?看起来【TCP长连接+私有协议透传】和【MQTT+业务主题】似乎都能达到同样的目的,甚至用MQTT会使得设备端逻辑实现、APP端逻辑实现、云端架构实现更加复杂。那么为什么物联网还要使用MQTT协议呢?一、MQTT相比于TCP长连接的优势1、协议更标准MQTT是标准的RFC协议,相比于私有协议而言更加标准。好处在于:(1)协议非常完整,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,...阅读全文

BEWINDOWEB 2019-09-21 00:00 BEWINDOWEB

TCP/IP, WebSocket 和 MQTT - 张善友

按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议。在这三者之间, TCP是HTTP和MQTT底层的协议。大家对HTTP很熟悉,这里简要介绍下MQTT。MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器的通信协议。 HTTP的不足 HTTP协议经过多年的使用,发现了...阅读全文

博客园 2014-11-09 20:08 博客园

MQTT比TCP协议好在哪儿?

登录后你可以不限量看优质回答私信答主深度交流精彩内容一键收藏登录查看全部 24 个回答程序员cxuan​微信搜:程序员cxuan,个人微信 lx252279279374 人赞同了该回答哈哈哈,终于找到一篇 MQTT 协议的问题了,我写过一篇关于 MQTT 基础文章,相信你看完之后就会对 MQTT 有详细的认识了。之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦。那么读者的要求必须要满足啊,所以现在 @一下这位小姐姐,来听课啦!什么是 MQTT 协议MQ...阅读全文

TCP/IP学习(四)TCP缓冲区大小及限制_胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力

这个问题在前面有的部分已经涉及,这里在重新总结下。主要参考UNIX网络编程。 (1)数据报大小 IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段为16位。 IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节)。 (2)MTU 许多网络有一个可由硬件规定的MTU。以太网的MTU为1500字节。有一些链路的MTU的MTU可以由认为配置。IPv4要求的最小链路...阅读全文

CSDN博客_tcp缓冲区 2012-07-19 18:45 CSDN博客_tcp缓冲区

30张图解: TCP 重传、滑动窗口、流量控制、拥塞控制 - 小林coding

前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的。 来了,今天又来图解 TCP 了,小林可能会迟到,但不会缺席。 迟到的原因,主要是 TCP 巨复杂,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了。。。 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 正文 相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢?...阅读全文

博客园 2020-04-19 16:22 博客园

关于 TCP/IP,运维必知必会的十个问题 - 云+社区

一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp 等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协...阅读全文

腾讯云 2020-06-03 00:00 腾讯云

UDP 单播、广播和多播 - Rimond_Jing

使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。           单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这...阅读全文

博客园 2015-05-05 20:56 博客园

TreeMap原理实现及常用方法 - 工匠初心

目录一. TreeMap概述二. 红黑树回顾三. TreeMap构造四. put方法五. get 方法六. remove方法七. 遍历八. 总结 前面我们分别讲了Map接口的两个实现类HashMap和LinkedHashMap,本章我们讲一下Map接口另一个重要的实现类TreeMap,TreeMap或许不如HashMap那么常用,但存在即合理,它也有自己的应用场景,TreeMap可以实现元素的自动排序。 一. TreeMap概述 TreeMap存储K-V键值对,通过红黑树(R-B tree)实现...阅读全文

博客园 2019-07-21 16:32 博客园

图解LinkedHashMap原理

图解LinkedHashMap原理1 前言 LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理 2 LinkedHashMap使用与实现 先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟: LinkedHashMap结构.png 2.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<String...阅读全文

简书 2021-08-20 16:19 简书

排序算法(六)

前言我们在上篇文章 排序算法(五)-双调排序 介绍了双调排序,今天我们来看一下另一种排序算法 —— TimSort。TimSort是Tim Peters发明的一种混合排序,最早是Python语言的内置排序算法。关于Python内置的TimSort描述可以查看该 文档。关于TimSort的理论基础,可以查看该篇论文 Optimistic Sorting and Information Theoretic Complexity,这篇论文论证了插入排序和归并排序合并后效率提高的可能性,即TimSort...阅读全文

TimSort | SakuraTears的博客 2019-09-07 00:00 TimSort | Sakur 等

为什么Redis单线程还这么快?

众所周知,Redis在内存库数据库领域非常地火热,它极高的性能和丰富的数据结构为我们的开发提供了极大的便利。 但我们也听说了,Redis是单线程的,为什么采用单线程的Redis也会如此之快呢?这篇文章我们来分析一下其中的缘由。 其实,严格来说,Redis Server是多线程的,只是它的请求处理整个流程是单线程处理的。这一点我们一定要清楚了解到,不要单纯地认为Redis Server是单线程的! 我们平时说的Redis单线程快是指它的请求处理过程非常地快! 下面我们就来分下一下为什么请求处理使用...阅读全文

Kaito's Blog 2020-06-28 00:00 Kaito's Blog

golang拾遗:为什么我们需要泛型 - apocelipes

从golang诞生起是否应该添加泛型支持就是一个热度未曾消减的议题。泛型的支持者们认为没有泛型的语言是不完整的,而泛型的反对者们则认为接口足以取代泛型,增加泛型只会徒增语言的复杂度。双方各执己见,争执不下,直到官方最终确定泛型是go2的发展路线中的重中之重。 今天我们就来看看为什么我们需要泛型,没有泛型时我们在做什么,泛型会带来哪些影响,泛型能拯救我们吗? 本文索引 没有泛型的世界 暴力穷举 依靠通用引用类型 动态类型语言的特例 动静结合 使用interface模拟泛型 interface会进行...阅读全文

博客园 2020-10-17 19:12 博客园

Golang 泛型初探

Golang 的泛型实现已经正式合并到 master 分支上啦,之后也会在 master 分支上进行开发,那么作为期待这个 feature 许久的 gopher,也想第一时间看看到底是如何实现的。语法这里不过多讲解泛型的语法,具体可以参考一下 https://github.com/golang/go/issues/43651 这个 issue。简单来说,在 struct 和 func 的名字后面可以加一个 [] 里面包含泛型的名字和限制条件,比如:123type container[T any]...阅读全文

Pure White 2021-03-09 00:00 Pure White

Skip List--跳表(全网最详细的跳表文章没有之一)

登录注册写文章首页下载APPIT技术抽奖Skip List--跳表(全网最详细的跳表文章没有之一)fanrui关注赞赏支持Skip List--跳表(全网最详细的跳表文章没有之一)跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四版》这两本书中也没有介绍跳表。但是跳表插入、删除、查找元素的时间复杂度跟红黑树都是一样量级的,时间复杂度都是O(logn),而且跳表有一个特性是红黑树无法匹敌的(具体什么特性后面会提到)。所以在工业中,跳表...阅读全文

简书 2021-08-17 15:25 简书

深入学习MySQL事务:ACID特性的实现原理 - 编程迷思

事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。 一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 首先回顾一下MySQL事务的基础知识。 1...阅读全文

博客园 2019-01-29 08:26 博客园

深入剖析Linux IO原理和几种零拷贝机制的实现

前言零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术和内存区域映射技术。零拷贝机制可以减少数据在内核缓冲区和用户进程缓冲区之间反复的 I/O 拷贝操作。零拷贝机制可以减少用户进程地址空间和内核...阅读全文

知乎 2019-09-22 00:00 知乎

Apache Thrift系列详解(二)

前言 Thrift提供的网络服务模型:单线程、多线程、事件驱动,从另一个角度划分为:阻塞服务模型、非阻塞服务模型。 阻塞服务模型:TSimpleServer、TThreadPoolServer。 非阻塞服务模型:TNonblockingServer、THsHaServer和TThreadedSelectorServer。 TServer类的层次关系: 正文 TServer TServer定义了静态内部类Args,Args继承自抽象类AbstractServerArgs。AbstractServe...阅读全文

网络服务模型 2018-06-19 00:00 网络服务模型

Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式

文章目录 同步与异步 半同步/半异步模式 变体:半同步/半反应堆模式 改进:更高效的半同步/半异步模式 领导者/追随者模式 组件 :句柄集、线程集、事件处理器 并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法。服务器主要有两种并发编程模式:半同步/半异步模式(half-sync/half-async)模式和领导者/追随者(Leader/Followers)模式 同步与异步 首先在这里要指出,这里的"同步"和“异步”与I/O模型中的”同步I/O“与“异步I/O”是两个完全不同的概念,...阅读全文

码农家园 2020-10-07 00:00 码农家园

基于Netty的高性能RPC框架Nifty(一)

1. 前言 Thrift是Facebook贡献给apache的rpc框架,但是这款框架的java版本在公司内部并不是那么受待见,因为其性能相比C++版本差了很多,但是后续基于netty重写了以后性能得到了极大的提升,相比于C++版本已经差距不大了。为此取了个新的名字Nifty = Netty + Thrift。 如果你使用过thrift的话,基本都会使用自动生成的代码,那真的是没法看,即使定义一个简单的类都会生成巨多的代码,把read,write方法全部写到里面去了。总之早期的thrfit各方面...阅读全文

服务端启动全解析 2020-10-04 00:00 服务端启动全解析

如何理解BIO、NIO、AIO的区别?

很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。 Java中的IO原理 首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。 那内核是如何进行IO交互的呢? 网卡收到经过网线传来的网络数据,并将网络数据写到内存中。 ...阅读全文

juejin.cn 2019-11-01 00:00 juejin.cn