smallin/my_async_tcp

1.0.0

Latest
uploaded 1 week ago
异步TCP服务器

readme

# my_async_tcp components for IDF

- 苦于使用乐鑫官方http组件时存在部分问题无法解决,通过学习AsyncTCP库设计思路,基于ESP IDF v5.4.0平台,利用LWIP raw API设计了这个异步TCP服务组件。本组件采用事件驱动架构、对客户端对象及事件进行资源池化管理,提供非阻塞式操作,提高了并发能力。受现有条件影响,只使用了ESP32C3进行测试。

![AsyncTCP Architecture](https://via.placeholder.com/800x400.png?text=AsyncTCP+Flow+Diagram) <!-- 实际使用时可替换为架构图 -->

## 目录
- [核心特性](#核心特性)
- [快速开始](#快速开始)
- [API参考](#api参考)
- [编译配置](#编译配置)
- [内存管理](#内存管理)
- [贡献指南](#贡献指南)
- [其他事项](#其他事项)
- [许可证](#许可证)

---

## 核心特性

### 客户端功能
- **异步连接**:支持IP/域名两种连接方式
- **数据流控制**:窗口大小动态调整
- **ACK超时检测**:可配置应答超时阈值
- **延迟确认**:支持TCP延迟ACK优化
- **Nagle算法**:可选启用/禁用低延迟模式
- **事件回调**:连接/断开/数据/错误全生命周期事件

### 服务器功能
- **事件池、连接池预分配**:减少动态内存分配
- **并发控制**:可配置最大backlog队列
- **连接回收**:自动重置客户端状态
- **统一事件循环**:单任务处理所有I/O事件

### 系统特性
- **零拷贝设计**:pbuf直接传递减少内存复制
- **线程安全队列**:带互斥锁保护的事件队列
- **LWIP原生集成**:直接操作tcp_pcb控制块

---

## 快速开始

### 依赖项
- ESP-IDF 5.4.0+

### 基础用法
```
// 最小服务器示例
#include "AsyncClient.hpp"
#include "AsyncServer.hpp"

void setup() {
    AsyncServer server(8080);
    server.set_connected_handler([](void*, AsyncClient* client) {
        client->set_data_received_handler([](void*, AsyncClient* c, const char* data, size_t len) {
            c->write(data, len); // echo服务器
        });
    });
    server.begin();
}
```

## API参考

### AsyncClient类

#### 连接管理
1. 通过IP地址建立连接:connect(ip_addr_t, uint16_t)	
2. 通过域名建立连接:connect(const char*, uint16_t)	
3. 优雅关闭/强制终止连接:close(bool force=false)	

#### 数据操作
1. 发送原始数据:write(const void*, size_t)
2. 缓冲发送模式:add()/send()
3. 手动确认接收数据:ack(size_t len)

### AsyncServer类

#### 服务器控制

1. 启动监听:begin()
2. 关闭服务器:end()
3. 获取服务器状态:get_connection_state()

#### 配置
 
 1. 全局Nagle算法开关:set_nodelay(bool)

## 编译配置

1. ACK超时时间(ms):CONFIG_ASYNC_MAX_ACK_TIME
2. 最大等待连接数:CONFIG_SERVER_BACKLOG_LEN
3. 客户端对象池大小:CONFIG_CLIENT_POOL_LEN
4. 事件队列深度:CONFIG_EVENTS_QUEUE_LEN
5. 建议增大WatchDog超时时间,以防止多并发条件下处理超时;

## 内存管理

### 对象生命周期

1. 客户端实例(服务器使用时):由服务器对象池统一管理;
2. pbuf处理:在接收回调中必须调用ack()或手动pbuf_free();
3. 事件处理:由事件池自动化分配、回收;

## 贡献指南

1. 本牛马目前仅能以业余时间开发、测试开发板只有非官方ESP32C3,软件未进行充分测试,如有问题请告知;
2. 欢迎提供各类支持;


## 许可证

```
/*
 * 本组件根据本人理解,在IDF v5.4.0 版本上实现,采用乐鑫代码风格不兼容原作者的API。
 * Hristo Gochkov 的异步 TCP 库 (https://github.com/me-no-dev/AsyncTCP)
 * 原代码版权遵循 GNU LGPL 2.1 许可
 * 
 * 本代码版权声明:
 * Copyright (c) 2023 小林同学. All rights reserved.
 * Apache License 2.0 © 2023 小林同学
```

Supports all targets

License: Apache 2.0

To add this component to your project, run:

idf.py add-dependency "smallin/my_async_tcp^1.0.0"

or download archive

Stats

  • Archive size
    Archive size ~ 16.87 KB
  • Downloaded in total
    Downloaded in total 0 times
  • Downloaded this version
    This version: 0 times

Badge

smallin/my_async_tcp version: 1.0.0
|