MQTT 协议介绍

MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

more…

QUIC 协议

QUIC

QUIC 协议原理分析: https://zhuanlan.zhihu.com/p/32553477

chromium QUIC: https://www.chromium.org/quic/

常用文献地址整理

工具

1、外文文献查找 Google: https://ac.scmor.com/ sci-hub: https://sci-hub.ren/ (从百度文库按关键词查找找到相对应文献 复制 doi 号去下载 下载格式为 pdf) semantic scholar: https://www.semanticscholar.org/ dblp: https://dblp.uni-trier.de/db/ ACM 数字图书馆: https://dl.acm.org/ 2、国内文献查找 中国知网: https://www.cnki.net/ 万方数据: http://www.wanfangdata.com.cn/index.html 维普网: http://www.cqvip.com/ 3、文献管理 pdf 文件文献管理器 ivy-sci(带翻译 参考文献自动索引 图标索引 免费可以 50 篇 多的要会员) 知网格式文献管理器 全球学术快报 ipad 手机 windows 均有客户端 在线管理:https://readp more…

读书|《计算机网络:自顶向下方法》

读书

《计算机网络:自顶向下方法》是本经典的书,里面的“人物专访”给我留下深刻印象,这使原本枯燥的学习润色许多,通过读这些专访我对网络更加感兴趣了,也清晰的认识到这些学术牛人们的学习方式、思维方式。

Java微基准测试工具JMH

教程 Java JMH 工具

JMH(Java Microbenchmark Harness)是一个进行基准测试的工具,由 OpenJDK 团队研发,JMH 可以一个方法为维度进行吞吐量、调用时间等测试,精度可以精确到微秒级,JMH 提供注解可以更加便捷的使用。 JMH 使用注意点 测试前需要预热 防止无用代码进入测试方法种 防止代码消除 如何使用 JMH Maven 依赖: <!-- JMH 基准依赖 --> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.28</version> </dependency> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>1.28</version> </dependency> 启动程序 此示例程序可以直接启动。 // 测试类型,例如吞吐、平均时间等 @BenchmarkMode({Mode.Throughput}) // 预热,iterations预热次数 more…

Dubbo|ExtensionClassLoader SPI

RPC Dubbo

Dubbo | ExtensionClassLoader SPI 占个位。

Netty|PooledByteBufAllocator

Netty

先占个位。

Java|Callable、Future 实践

Java 多线程

Java|CountDownLatch

Java 多线程

CountDownLatch 是一个线程栓子,当计数到达 0 释放所有线程运行,它只能使用一次,CyclicBarrier 可以使用多次。 示例一 public class CountDownLatchUtil { private CountDownLatch start; private CountDownLatch end; private int poolSize; public CountDownLatchUtil() { this(10); } public CountDownLatchUtil(int poolSize) { this.poolSize = poolSize; start = new CountDownLatch(1); end = new CountDownLatch(poolSize); } public void latch(MyFunctionalInterface functionalInterface) throws InterruptedException { ExecutorService service = Executors.newFixedThreadPool(poolSize); for (int i = 0; i < poolSize; i++) { Runnable runnable = new Runnable() { @Override public void run() { try { start.await(); functionalInterface.run(); } catch (InterruptedException e) { e.printStackTrace(); } finally { end.countDown(); } } }; service.execute(runnable); } // start all task start.countDown(); // wait until all task finish end.await(); } @FunctionalInterface public interface MyFunctionalInterface { void run(); } } 示例二 class Driver { // ... void main() throws InterruptedException { CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(N); for (int i = 0; i < N; ++i) // create and start threads new more…

Netty|AbstractChannelPoolMap

Netty

先占个位。

Previous Page 3 of 20 Next Page