
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
MQTT 连接由客户端向服务器端发起。任何运行了 MQTT 客户端库的程序或设备都是一个MQTT客户端 ,而 MQTT服务器则负责接收客户端发起的连接,并将客户端发送的消息转发到另外一些符合条件的客户端。客户端与服务器建立网络连接后,需要先发送一个CONNECT数据包给服务器。服务器收到CONNECT包后会回复一个CONNACK给客户端,客户端收到CONNACK包后表示 MQTT 连接建立成功。如
Request---Response。
单线程 reactor 模型(默认)事件对象与 event_base 解耦:事件可动态增删持久化(EV_PERSIST)是最常用模式,避免频繁创建/销毁事件回调中不要阻塞:保持回调快速返回是高并发关键资源管理严格:谁创建谁释放,顺序不可颠倒。
Socket 网络编程是计算机网络领域中最基础且核心的编程范式之一,其核心思想源于“端到端通信”的抽象模型。它将复杂的网络协议栈(主要基于 TCP/IP)封装为统一的编程接口(API),使得应用程序无需关心底层物理链路、路由、数据链路等细节,即可实现进程间的跨主机数据交换。以下从概念起源、抽象模型、核心机制、编程流程以及关键思想等方面进行系统详解。
Redis 是一种 NoSQL 数据库,采用键值对(key-value pair)模型,其中键通常为字符串,值可以是多种数据类型。它主要运行在内存中,以实现极高的读写速度,但也支持持久化机制将数据保存到磁盘。Redis 的架构基于单线程事件循环模型(在版本 6.0 后引入多线程 I/O 以提升性能),这使得它在处理高并发请求时高效且资源消耗低。
在 TCP 四次挥手中,主动关闭方发送完最后一个确认包(ACK)后,并不知道对方是否收到了。如果 ACK 丢失,被动关闭方会超时并重传最后的 FIN 包。如果此时主动方已经彻底关闭连接,它将无法响应这个 FIN,导致对方无法正常关闭。TIME_WAIT允许主动方在窗口期内重发 ACK。客户端 → 服务端:FIN(我发完了)服务端 → 客户端:ACK(收到你的FIN)服务端 → 客户端:FIN(我也
第二次握手丢失是最浪费资源的情况,因为它迫使通信双方都在不断尝试重发。阶段现象结果客户端 (Client)状态变为FIN_WAIT_1,没收到 ACK超时重传FIN 包;若多次重传失败,直接强制关闭。服务端 (Server)没收到 FIN 包状态保持;直到保活探测超时或收到 RST 后才关闭。第一次挥手丢失并不可怕,客户端会通过“反复横跳”(重传)来尝试修复;如果实在连不上,客户端会自己先“撒手不
时间复杂度优秀select/poll:每次调用都需要把整个关注的文件描述符集合(fd set)从用户态拷贝到内核态,并且内核需要线性扫描整个集合来找出哪些 fd 就绪,时间复杂度是 O(n)。epoll:只需要在初次注册兴趣事件时(epoll_ctl)拷贝一次,之后每次 epoll_wait 调用时,内核直接返回已经就绪的事件列表,时间复杂度接近 O(1)(实际上是 O(就绪事件数量)),不需要再







