diff --git a/README.md b/README.md index 7099093831000bb37db0bdaa719b65e729805167..65dc63261264fe4a25e2d27672774f7bf5d243e2 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,133 @@ -## smart-socket -[![](https://img.shields.io/badge/lang-Chinese-.svg)](README.md) [![](https://img.shields.io/badge/lang-English-.svg)](./README.en.md) -smart-socket 是一款增强了原生 JDK 实现的 AIO 通信框架。 - -换言之,smart-socket 100% 遵循 JDK 对于 AIO 接口规范的定义,只是重新提供了一套代码实现。 -使其有着相较 JDK 官方 AIO 更高的通信性能,更少的资源开销,以及更稳定的运行保障。 - -- **[文档地址](https://smartboot.tech/smart-socket/)** -- **[我们的用户](https://smartboot.tech/smart-socket/users.html)** - -### 为什么开发 smart-socket? -- AIO 是一个面向开发人员更友好的设计理念,值得被更多人应用。 -- 原生 JDK 提供的实现存在性能问题,其线程模型限制了 IO 调度效率。 -- 原生 JDK 提供的实现存在资源开销问题,连接越多内存需求越高,难以在低规格服务器中支撑百万级长连接。 -- 原生 JDK 提供的实现存在稳定性问题,Mac 系统下进行压测存在不明原因的死机现象。 -- 我们需要一款比 Netty 更容易上手的通信框架。 - - - - -### 🍁项目特色 -1. 高性能、高并发、低延迟、绿色节能。 -2. 代码量极少,可读性强。核心代码不到 1500 行,工程结构、包层次清晰。 -3. 学习门槛低,二次开发只需实现 2 个接口(Protocol、MessageProcessor),具备通信开发经验的几乎无学习成本。 -4. 良好的线程模型、内存模型设计,保障服务高效稳定的运行。 -5. 支持自定义插件,并已提供了丰富的插件,包括:SSL/TLS通信插件、心跳插件、断链重连插件、服务指标统计插件、黑名单插件、内存池监测插件。 - -### 🍒生态项目 -- [smart-http](https://gitee.com/smartboot/smart-http) -- [smart-servlet](https://gitee.com/smartboot/smart-servlet) -- [smart-mqtt](https://gitee.com/smartboot/smart-mqtt) - -### 🍭推荐 -- 《[smart-socket 单机百万长连接实战教程](https://mp.weixin.qq.com/s/l_IBSBI6SAY4FmomwLFa-Q)》 -- 《[新手小白必读:通信协议](https://mp.weixin.qq.com/s/2w9C8CQvhOXZsLEOd6Gzww)》 -- 《[图解通信框架的调度模型](https://mp.weixin.qq.com/s/Hq4T-X7LtjIOVi1aEEvxKQ)》 -- 《[通信框架 smart-socket 设计概览](https://mp.weixin.qq.com/s/M9sMfDKahgsR8LgX0M4CVQ)》 - -### 🎃性能排行 -![输入图片说明](image.png) - -### 🎈插件清单 -| Plugin | 用途 | -|---|---| -|BlackListPlugin|黑名单插件,smart-socket会拒绝与黑名单中的IP建立连接| -|BufferPageMonitorPlugin|内存池监控插件| -|HeartPlugin|心跳插件| -|MonitorPlugin|服务指标监控插件| -|SocketOptionPlugin|连接属性配置插件| -|SslPlugin|TLS/SSL加密通讯插件| -|StreamMonitorPlugin|传输层通讯码流监控插件| - -### 🍩感谢 -- 感谢 Gitee 提供的代码托管和曾经的 Pages 服务。 -- 感谢 Github 提供的代码托管和现在的 Pages 服务。 -- 感谢 JetBrains 为 smart-socket 提供的 IDEA License。 - - -### 🥳加入社群 - -- **官方QQ群:** 172299083 、830015805。入群条件: - 1. 普通用户:[捐赠5元](https://smartboot.tech/donation.html),并备注您的QQ号,我们将人工审核入群人员。 - 2. 企业用户:完成【[案例登记](https://gitee.com/smartboot/smart-socket/issues/IHV69)】并在加群时备注企业名。 -- 扫描底部二维码关注三刀公众号 - - +smart-socket +smart-socket 是一个基于Java AIO实现的高性能网络通信框架,提供稳定、高效的数据传输能力,适用于构建各类网络应用。框架支持TCP/UDP、SSL/TLS加密、KCP协议,同时具备连接池、插件化扩展、流量监控等特性。 + +🍁 项目特色 +- 高性能:基于Java AIO实现,减少线程切换开销,提高并发处理能力 +- �1111 +- 支持多种协议:包括TCP、UDP、SSL、KCP +- 插件扩展:提供黑名单、心跳、流量监控、限流、重连等常用插件 +- �1111 +- 内存优化:采用虚拟缓冲池机制,避免频繁GC +- 易用API:提供简洁的API接口,快速搭建客户端与服务端 +- 流量监控:可实时监控网络数据的输入输出 +- 支持Spring集成,方便企业级项目接入 + +🍒 生态项目 +- smart-socket-rpc:基于smart-socket的RPC通信模块 +- smart-socket-spring-boot-starter:Spring Boot自动装配模块 +- smart-socket-benchmark:性能测试工具包 +- smart-socket-example:示例代码 + +🍭 推荐 +为确保最佳性能与稳定性,建议: +- 使用JDK11及以上版本 +- 服务端配置充足的内存资源 +- 合理设置缓冲区大小 +- 启用插件时注意资源释放 +- 对敏感数据启用SSL/TLS加密传输 + +🎃 性能排行 +smart-socket在百万并发连接测试中表现优异,性能稳定。具体数据可通过执行benchmark模块进行验证。 + +🎈 插件清单 +- BlackListPlugin:黑名单插件,阻止非法IP连接 +- BufferPageMonitorPlugin:缓冲池监控插件 +- HeartPlugin:心跳检测插件,自动重连 +- IdleStatePlugin:空闲状态插件,检测读写空闲 +- MonitorPlugin:流量监控插件 +- ProxyProtocolPlugin:支持PROXY协议 +- RateLimiterPlugin:限流插件,控制读写速率 +- ReconnectPlugin:断线重连插件 +- SocketOptionPlugin:Socket选项插件,自定义Socket参数 +- SslPlugin:SSL/TLS加密插件 + +🍩 感谢 +感谢所有贡献者与社区支持。项目灵感与部分工具方法借鉴了Netty与NIO框架的设计思想。 + +🥳 加入社区 +- [Gitee 项目主页](https://gitee.com/smart-socket) +- QQ群:452783363 +- 微信群:可扫描项目主页二维码加入 +- Issues:欢迎提交问题与建议 + +## 使用方法 + +### 服务端启动 +```java +public class Server { + public static void main(String[] args) throws IOException { + AioQuickServer server = new AioQuickServer(8080, new StringProtocol(), new StringServerProcessor()); + server.start(); + } +} +``` + +### 客户端连接 +```java +public class Client { + public static void main(String[] args) throws IOException { + AioQuickClient client = new AioQuickClient("127.0.0.1", 8080, new StringProtocol(), new StringClientProcessor()); + client.start(); + } +} +``` + +### 添加插件 +```java +server.getProcessor().addPlugin(new MonitorPlugin()); +server.getProcessor().addPlugin(new HeartPlugin(5, TimeUnit.SECONDS)); +``` + +### SSL加密传输 +```java +// 服务端 +SslPlugin sslPlugin = new SslPlugin(new ServerSSLContextFactory(keyStoreInputStream, keyStorePassword, keyPassword), ClientAuth.NONE); +server.getProcessor().addPlugin(sslPlugin); + +// 客户端 +SslPlugin sslPlugin = new SslPlugin(new ClientSSLContextFactory(trustStoreInputStream, trustPassword)); +client.getProcessor().addPlugin(sslPlugin); +``` + +### 使用Spring Boot +```yaml +# application.yml配置示例 +smart: + socket: + port: 8080 + protocol: string + processor: messageProcessor + buffer-size: 1024 + thread-num: 4 + ssl-enabled: false +``` + +```java +// 启动类 +@SpringBootApplication +public class SpringDemo { + public static void main(String[] args) { + SpringApplication.run(SpringDemo.class, args); + } +} +``` + +## 开发者指南 +- 单元测试:使用JUnit编写,位于`aio-pro/src/test/java` +- 性能测试:通过`benchmark`模块进行压测 +- 示例代码:`example`模块包含完整通信示例 +- 协议扩展:继承`Protocol`接口实现自定义协议解析 +- 插件开发:继承`AbstractPlugin`实现新插件 + +## 贡献 +欢迎提交PR与Issue。请遵循以下流程: +1. Fork项目 +2. 创建新分支 +3. 提交代码变更 +4. 提交PR并说明修改内容 +5. 等待审核与合并 + +## 版权与许可 +遵循Apache-2.0协议,详情请查看LICENSE文件。 \ No newline at end of file