{"id":27226084,"url":"https://github.com/codeacmen/ios-async-socket-explorer","last_synced_at":"2025-04-10T11:46:55.909Z","repository":{"id":282863014,"uuid":"949882548","full_name":"CodeAcmen/ios-async-socket-explorer","owner":"CodeAcmen","description":"生产级iOS网络通信、架构实战 基于 CocoaAsyncSocket 打造的高性能底层通信框架，日均支撑10w+真实连接！来源于多年工作经验总结，经过IM系统生产环境验证（已脱敏），完整呈现从单TCP架构到企业级多路复用架构的演进之路。","archived":false,"fork":false,"pushed_at":"2025-04-09T03:01:07.000Z","size":1326,"stargazers_count":79,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-09T03:28:04.158Z","etag":null,"topics":["cocoaasyncsocket","ios","objective-c","socket","tcp","tcp-socket","viper-architecture"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodeAcmen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-17T09:42:01.000Z","updated_at":"2025-04-09T03:01:10.000Z","dependencies_parsed_at":"2025-04-09T03:38:19.479Z","dependency_job_id":null,"html_url":"https://github.com/CodeAcmen/ios-async-socket-explorer","commit_stats":null,"previous_names":["codeacmen/ios-network-stack-dive","codeacmen/ios-async-socket-explorer"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeAcmen%2Fios-async-socket-explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeAcmen%2Fios-async-socket-explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeAcmen%2Fios-async-socket-explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeAcmen%2Fios-async-socket-explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeAcmen","download_url":"https://codeload.github.com/CodeAcmen/ios-async-socket-explorer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248214330,"owners_count":21066415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cocoaasyncsocket","ios","objective-c","socket","tcp","tcp-socket","viper-architecture"],"created_at":"2025-04-10T11:46:55.162Z","updated_at":"2025-04-10T11:46:55.897Z","avatar_url":"https://github.com/CodeAcmen.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ios-async-socket-explorer（逐步完善ing）\n\n## 项目描述\n#### **生产级网络通信架构实践**\n基于 **CocoaAsyncSocket** 实现的底层网络通信系统，来源于即时通讯领域实际工作经验（**已脱敏**）。展示了从**小型项目单 TCP 架构**，逐步演进为适用于中大型项目**多路复用架构**的过程，包含协议设计、架构解耦、高并发优化等核心实践。\n\u003e **个人利用非工作时间整理，持续更新中...** 🚀\n\n\n## 核心价值\n- **即学即用**：整体系统经过生产环境验证，对应小、中、大型项目有不同的设计方案。（亿级流量暂无实际经验）\n- **深度解耦**：企业级架构设计，模块可插拔\n- **性能保障**：支持万级并发，内置线程安全模型\n\n## 核心功能\n**按需使用**，快速定位需求\n\n| 需求分类 | 将会实现的功能 | 常用场景 |\n| -------------|----------------------- | --------------------|\n| 网通通信核心 | TCP连接管理、心跳保活、断线重连、TLS安全传输 | 即时通讯IM、IoT设备管理 |\n| 协议设计 | 自定义二进制协议（魔数+CRC32+TLV结构）、Protobuf兼容、数据压缩 | 高吞吐、低延迟场景 |\n|高并发优化 | 多路复用连接池（支持10k+并发）、GCD多读单写模型、零拷贝传输优化 | 实时数据同步、高并发消息推送 |\n| 现代企业级架构 | VIPER分层架构+注入式解耦框架（Typhoon）实现的聊天UI界面、IM防腐层设计 | 大型项目长期维护 |\n| 可靠传输 | ACK/NACK 确认机制、超时重传、自适应动态心跳 | 弱网环境、可靠级传输 |\n\n\n\n## 网络架构演进\n| 阶段                    | 方案                 | 适用场景               | 关键特性                   |\n| ---------------------- | ------------------- | ---------------------- | ------------------------ |\n| TJPConcurrentNetworkManager | 单 TCP 通道           | 小型项目/中型项目早期  | 心跳保活、断线重连、协议解析、线程安全 |\n| TJPNetworkManagerFinal    | 中心管理+会话自治     | 中大型项目             | 多路复用连接池、状态机驱动、VIPER业务层、动态策略配置 |\n\n## 性能基准\n\n### 单连接测试\n- **1KB 数据包吞吐测试**：12,000 pps (9.6 Gbps)\n- **1MB 大包传输延迟**：平均 70ms（含完整往返校验）\n\n### 多连接压测\n- **10k 并发连接**：内存占用 2.3GB（216B/连接）\n- **同时传输消息**：线程切换耗时占比 \u003c 3%\n\n### 弱网模拟测试\n- **60% 丢包环境**：消息平均到达时延 1.25s\n- **80% 带宽限制**：吞吐量保持理论值 90%\n\n### 内存管理指标\n- **传统 `NSMutableData`**：碎片率约 12%\n- **当前环形缓冲区**：碎片率约 2.1%\n\n\n## 项目进度与规划\n### ✅ **已发布版本 v1.0.0**\n#### 核心能力：**生产级网络通信架构** | **企业级 VIPER 架构** \n---\n\n#### 网络框架\n##### ConcurrentNetworkManager\n**高性能单 TCP 通信模块**（生产环境验证）\n- **核心特性**\n  - **连接管理**：TLS 支持 + 单连接管理\n  - **协议解析**：定长头部 + TLV协议 + CRC32校验\n  - **健壮机制**：指数退避重连 + 心跳保活（15s间隔/30s超时）\n  - **线程安全**：串行队列资源管理\n  - **容错设计**：ACK确认重试 + 随机抖动防惊群\n\n##### NetworkManagerFinal（企业级多路复用）\n**日均10w+连接验证 | 单元测试覆盖率\u003e90%**\n- **架构亮点**\n  - **中心协调器**：动态扩容 + 故障隔离\n  - **会话自治模型**：独立状态机 + 自适应心跳\n  - **安全协议栈**：二进制协议设计 + TLS加密\n  \n**Objective-C 接入示例**\n\n```Objc\n// 1. 初始化配置\nTJPNetworkConfig *config = [TJPNetworkConfig configWithMaxRetry:5 heartbeat:15];\n\n// 2. 创建会话（中心协调器自动管理）\nTJPConcreteSession *session = [[TJPNetworkCoordinator shared] createSessionWithConfiguration:config];\n\n// 3. 连接服务器\n[session connectToHost:@\"example_host\" port:8080];\n\n// 4. 发送消息\nNSData *messageData = [@\"Hello World\" dataUsingEncoding:NSUTF8StringEncoding];\n[session sendData:messageData];\n```\n\n**Swift 接入示例**\n\n```Swift\n// 1. 初始化配置\nlet config = NetworkConfig(maxRetry: 5, heartbeat: 15)\n\n// 2. 创建会话\nguard let session = NetworkCoordinator.shared.createSession(config: config) else { return }\n\n// 3. 连接服务器\nsession.connect(toHost: \"example_host\", port: 8080)\n\n// 4. 发送消息\nlet messageData = \"Hello World\".data(using: .utf8)\nsession.send(data: messageData)\n```\n##### 企业级 VIPER 架构体系\n**中大型应用分层解耦设计解决方案**\n- **架构优势**\n  - **模块化设计**：协议通信 + 依赖解耦\n  - **完整链路演示**：View → Presenter → Interactor → Router\n  - **响应式编程**：ReactiveCocoa 数据驱动\n  - **可测试性**：天然支持依赖注入\n  - **灵活路由**：Push/Present/Modal自由组合\n---\n如需更进一步对接状态管理框架、状态机、权限控制等高级功能，也可在现有架构基础上自然延展。\n\n\n#### 已知问题\n- AOP切面日志：多参数方法监听崩溃，问题已定位，后期修复。\n\nv1.1.1修复了因libffi编译导致无法在模拟器运行的问题\n\n### 版本规划\n#### 🔜 v1.1.0（开发中） - 可观测性增强\n- **关键指标采集**：网络质量/成功率/延迟监控\n- **全链路追踪**：端到端请求追踪\n- **崩溃收集**：异常崩溃捕获机制\n- **可行性分析报告**\n\n#### v1.2.0（规划中） - 长连接优化\n- **心跳保活增强**：运营商NAT超时适配\n- **防拦截策略**：运营商级心跳包伪装\n- **连接保持**：智能心跳间隔动态调整\n\n#### v1.3.0（规划中） - 性能升级\n- **连接池优化**：智能资源分配\n- **分包策略升级**：大文件分片传输\n- **QoS保障**：流量优先级控制\n\n#### v1.4.0（规划中） - 极端场景优化\n- **弱网对抗**：智能降级策略\n- **错误恢复**：多级故障回滚\n- **协议演进**：可靠UDP传输\n\n\n **✨ 持续迭代中，期待您的 Star 关注！ ✨**\n\n### 🚧**规划中**\n- **IM防腐层整理、聊天界面整理、可靠UDP协议、消息可靠传输、多级ACK响应机制...**\n\n\n## 使用方法\n\n**螺旋式进阶学习**：  \n项目采用 **螺旋式进阶方式**，从Demo演示到生产级代码，从单体架构演进至多路复用设计。每个阶段都配有对应的 **设计思路文档**，注释友好，结合实际开发经验和理论知识，逐步深入 **iOS TCP网络的核心技术**以及**现代化架构设计**。\n\n## 核心实现\nSocket通信模块架构\n```\n+--------------------------+\n|     Network Layer         |\n| (CocoaAsyncSocket wrapper)|\n+--------------------------+\n           |\n           v\n+--------------------------+\n|       SocketManager       |\n| (Connection, Heartbeat)   |\n+--------------------------+\n           |\n           v\n+--------------------------+\n|       Message Handler     |\n| (Message Parsing, Packets)|\n+--------------------------+\n           |\n           v\n+--------------------------+\n|      Protocol Layer       |\n|  (Custom Protocol Logic)  |\n+--------------------------+\n```\n\n### 完整TCP状态机实现\n\n通过实现完整的TCP状态机，掌握TCP协议的核心机制：\n- **三次握手**：在客户端与服务器之间建立可靠连接。\n- **慢启动**：在网络连接初期，逐渐增加传输速率以避免拥塞。\n- **快速重传**：在数据包丢失时，通过快速重传机制提高网络可靠性和数据传输效率。\n- **ACK/NACK机制**：保证数据的可靠传输，客户端和服务器交换确认包。\n- **超时重传机制**：数据包未收到确认时，执行超时重传，确保数据传输的可靠性。\n\n### 多路复用连接池\n\n实现连接池技术，能够在同一时刻管理多个并发连接，满足高并发需求：\n- 支持 **10k+ 并发连接**。\n- 提高连接的复用效率，减少连接的创建和销毁次数，降低资源消耗。\n\n### 生产级VIPER架构\n\n在iOS项目中，采用VIPER架构模式进行分层设计，提高系统的可维护性和扩展性：\n- **分层架构**：将网络层、业务逻辑层和UI层解耦，提升代码可维护性。\n- **Typhoon注入式框架**：使用Typhoon框架进行依赖注入，减少类之间的耦合，便于单元测试和功能扩展。\n```\n+-----------------+      +------------------+      +-----------------+\n|                 |      |                  |      |                 |\n|    View         | \u003c--\u003e |    Presenter     | \u003c--\u003e |   Interactor    |\n| (UI Components) |      | (Coordinator)    |      | (Business Logic)|\n|                 |      |                  |      |                 |\n+-----------------+      +------------------+      +-----------------+\n                             ^                        |\n                             |                        |\n                      +----------------+         +---------------------+\n                      |   Entity       |         |     Router          |\n                      |  (Data Models) |         | (Navigation Logic)  |\n                      +----------------+         +---------------------+\n```\n\n### iOS中的AOP实践\n\n实现面向切面编程（AOP）：\n- 通过切面方式AOP，为网络请求和响应逻辑增加额外的功能，如日志记录、错误处理等。\n\n## 技术栈\n\n- **编程语言**：Objective-C\n- **工具**：Xcode，Wireshark，Charles\n- **网络协议**：TCP，UDP，HTTP，HTTPS\n- **其他技术**：SSL/TLS，Socket编程，GCD，Protocol Buffers，VIPER架构，Typhoon框架，AOP\n\n## 学习资源\n\n### 推荐书籍与文档\n- 《计算机网络：自顶向下方法》\n- 《TCP/IP详解》\n- iOS官方文档：Networking Frameworks\n\n### 开源项目与工具\n- [CocoaAsyncSocket](https://github.com/robbiehanson/CocoaAsyncSocket) - 一个常用的iOS Socket编程库，用于处理TCP和UDP协议的网络编程。\n- [Wireshark](https://www.wireshark.org/) - 网络协议分析工具，帮助开发者监控和分析网络通信数据，调试网络层问题。\n- [Charles Proxy](https://www.charlesproxy.com/) - 网络请求调试工具，适用于捕获、分析和调试HTTP/HTTPS请求。\n- [Typhoon](https://github.com/appsquickly/Typhoon) - 一个依赖注入框架，用于iOS项目中管理对象依赖，帮助解耦组件，提升代码可维护性、可测试性。通过Typhoon可以实现清晰的依赖关系管理，支持生产级应用中的架构设计。\n- [Reachability](https://github.com/tonymillion/Reachability) - 非常常用的网络状态监听库，用来检测设备当前的网络连接状态。\n- [libffi](https://github.com/libffi/libffi) - 一个用于实现外部函数接口（FFI，Foreign Function Interface）的开源库，它提供了一种在运行时调用外部函数的方式，特别是对于动态语言和静态编译语言之间的交互。\n- [ReactiveObjC](https://github.com/ReactiveCocoa/ReactiveObjC) - 一个响应式编程库，用于简化异步事件流的处理和管理，广泛用于 iOS 和 macOS 开发中。\n- [MJRefresh](https://github.com/CoderMJLee/MJRefresh) - 一个常用的下拉刷新与上拉加载更多的库，提供丰富的自定义选项，用于处理 UITableView 和 UICollectionView 的刷新功能。\n- [DZNEmptyDataSet](https://github.com/dzenbot/DZNEmptyDataSet) - 一个简洁的空数据视图展示库，适用于 UITableView 和 UICollectionView，当数据为空时提供漂亮的占位视图。\n\n\n### 在线资源\n- [TCP/IP详解在线教程](http://www.tcpipguide.com/) - 一份详尽的TCP/IP协议教程，涵盖了从基础到高级的各个方面。\n- [Apple iOS Network Programming Guide](https://developer.apple.com/library/archive/documentation/Networking/Conceptual/NetworkingOverview/Introduction/Introduction.html) - 苹果官方的iOS网络编程指南，介绍了iOS中的网络编程技术和API。\n\n\n## 项目结构\n\n```\niOS-Network-Stack-Dive\n# 项目结构构思（后续会根据实际情况调整）\n\niOS-Network-Stack-Dive/\n├── Docs/                           # 文档\n│   ├── ArchitectureExtensions/                \n│   │   └── AspectLoggerDesign.md \n│   ├── CoreNetworkStackDoc/    \n│   │   ├── 协议流程解析图.jpg       \n│   │   ├── 单元测试用例文档\n│   │   ├── ProtocolParseDesign.md       \n│   │   ├── TJPNetworkManagerV2Design.md     \n│   │   └── TJPNetworkV3FinalDesign.md   \n│   ├── VIPER-Integration/   \n│   │   ├── VIPER-Design.md    \n│   │   └── VIPER-RouterGuide.md\n│   └── RFC/                       # 协议标准文档\n│       ├── RFC793-TCP.pdf         \n│       └── RFC768-UDP.pdf\n├── Labs/                          \n│   ├── NetworkFundamentals/       \n│   │   ├── Lab1-Socket-API/       # Socket实践\n│   │   └── Lab2-NSStream-Analysis/ # 流解析实验\n│   └── AdvancedLabs/              \n│       ├── CustomProtocol-Lab/    # 协议设计沙盒\n│       └── WeakNetwork-Simulation/ # 弱网模拟测试\n├── ArchitectureExtensions/       \n│   ├── VIPER-Integration/         # 生产级VIPER架构\n│   │   ├── NetworkService/        # 网络服务层\n│   │   │   ├── ConnectionManager/ # 连接池管理\n│   │   │   └── ProtocolAdapter/   # 协议适配器\n│   │   └── DI Container/          # 依赖注入实现\n│   └── AOP/                       \n│   │   └── LoggingAspect/         # 日志追踪切面\n│   └── NetworkMonitor/            # 网络监控\n├── CoreNetworkStack/              \n│   ├── TransportLayer/            # 传输层实现\n│   │   ├── TCP-State-Machine/     # TCP状态机实现\n│   │   └── Reliable-UDP/          # 可靠UDP实现\n│   └── ProtocolLayer/             \n│       ├── BinaryProtocol/        # 自定义二进制协议\n│       │   ├── Encoder-Decoder/   # 编解码器\n│       │   └── CRC-Checker/       # 校验模块\n│       └── Security/              \n│           ├── KeyExchange/       # 密钥交换\n│           └── PacketEncryption/  # 数据加密\n├── Tools/                         \n│   ├── NetworkDebugger/           # 网络调试工具集\n│   │   ├── PacketSniffer/         # 抓包分析器\n│   │   └── LatencySimulator/      # 延迟模拟器\n│   └── CI-Scripts/                \n│       ├── CoverageReport         # 覆盖率检测\n│       └── MemoryChecker          # 内存检测\n└── ProductionBridge/              \n    ├── CaseStudy-WeChat.pcapng    # 协议抓包分析\n    └── VIPER-Sample/              # 真实项目代码片段\n        └── MessageModule/         # 消息模块实现\n```\n\n## 贡献\n欢迎**任何开发者贡献代码、改进文档、提出意见和建议！！！**如果你有关于iOS网络栈的实践经验或心得，欢迎提交PR来丰富本项目。\n\n\n## License\n本项目遵循 **MIT 许可证**，详细信息请查看 [LICENSE](./LICENSE) 文件。\n\n\n## 特别说明：\n本项目不仅涵盖 **TCP/UDP 通信、协议解析、网络优化** 等底层技术，还涉及 **现代化架构设计、高并发处理、网络安全** 等企业级应用场景。  \n通过 **螺旋式进阶学习**，你将逐步掌握 **iOS 网络通信的核心技术**，并能在 **生产环境** 中 **高效开发、优化即时通讯系统**。  \n适合作为**iOS开发者**的网络层技术进阶指南。\n\n### 如果觉得有帮助，请点击右上角Star支持！你的认可是我持续优化的最大动力！\n\n## **注意事项**\n\n### 1. **非商业用途**\n本项目仅供个人学习、研究和交流使用，不得用于 **商业用途**。根据 **MIT 许可证**，您可以自由使用、修改、分发和出售本项目，但强烈建议您不要将其**直接**用于商业产品或服务中，如果您计划将项目用于商业用途，本项目作者不承担责任。\n\n### 2. **版权声明**\n本项目遵循 **MIT 许可证**。在分发本项目的修改版本或源代码时，请保留原始版权声明和许可证文件。  \n所有相关的知识产权和版权归原作者所有，除非明确授予许可，否则不得将其用于任何不符合许可证条款的目的。\n\n### 3. **数据隐私与安全**\n本项目涉及网络通信和消息传输功能，请确保您的使用符合 **数据隐私法律和规定**，特别是当您处理个人敏感数据时。  \n本项目不对任何因使用过程中涉及到的数据泄露、隐私侵犯或安全事件承担责任。\n\n### 4. **使用风险**\n本项目是一个开源学习工具，不保证其完整性和稳定性，因此在用于生产环境时，可能存在数据丢失、通信中断等风险。请确保在使用前进行充分测试，并自行承担使用本项目可能带来的风险。  \n\n### 5. **禁止滥用**\n本项目不得用于任何形式的 **恶意攻击**、**网络滥用**、**未经授权的数据访问** 等活动。  \n项目使用者应遵守当地的法律和法规，确保使用本项目不会违反任何国家或地区的网络安全法律。\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeacmen%2Fios-async-socket-explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeacmen%2Fios-async-socket-explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeacmen%2Fios-async-socket-explorer/lists"}