🔥 smart-socket 2024 新年首发
1、smart-socket 简介
smart-socket,一款面向万物互联的 Java 通信框架。
产品特色:
-
极简:于 2017 年开源至今发布了数十次版本,核心代码量始终控制在 2500 行以内,总代码量不足 5000 行。
-
易用:5 分钟上手(前提:未曾遭受网上错误编解码知识的毒害)
-
高性能:以算法之力充分驱动硬件算力之势,基于 smart-socket 的服务在通信性能方面可轻松超过其他计算机语言开发的程序,包括且不限于:C/C++、Golang、Rust、Erlang。
推荐理由:
-
国产化,源码 100% 自研,信创首选产品。
-
轻量化,生成 jar 包仅 62KB;单机百万长连接内存开销仅 4GB。
-
插件化,多款实用插件辅助高效通信编程。
-
人性化,低至分钟级的学习成本。
舒适的编程体验;高效的运行表现;极少的资源开销。
smart-socket 在多方面都遥遥领先 netty,除了知名度。
2、 版本更新
这个版本 smart-socket 持续精简通信内核,核心代码量已缩减至 2206 行。今年是 smart-socket 立项的第 9 个年头,大多数项目在开源多年之后都会变得越发臃肿,相较之下 smart-socket 就显得比较另类。
2.1 总结2023
在刚过去的 2023 年,smart-socket 几乎没引入新的特性。作为通信框架,smart-socket 始终坚守通信框架应尽的职责,保持一贯的极简、易用、高性能。而这份坚持,带给我们最大的挑战是:有些 netty 用户会觉得 smart-socket 不太好用。
而这份“不太好用”,本质上是这类用户并不真正了解通信编程,甚至连“协议为何?”都不甚清楚。脱离了基础理论,存粹当一个 API Boy,根本无法适应环境的变换。
优秀开源项目的背后通常都藏着一个陷阱,又或者说是一个残酷的现实:一小撮优秀的人,让绝大多数用户变得无知。
smart-socket 致力于成为一款面向万物互联的 Java 通信框架。期望有一群专业的用户,为客户提供专业的服务。这份专业,主要体现在对协议编解码、IO 模型、内存模型和线程模型等理论的掌握。
缺乏学习态度的用户,netty 会是最好的选择;而选择了 smart-socket,这些基础便成了必修课。
关于2024
smart-socket 在 2024 年依旧没有功能性的规划,这一点可能要让老用户失望了。技术层面主要有两项任务:
其一,smart-socket 将尽快结束 1.5 版本,完全步入 1.6 版本。两者的差别在于 1.5 版本适配的 JDK 版本为 1.8,而 1.6 则至少适配 JDK 11。至于用户更感兴趣的虚拟线程,smart-socket 不会刻意去集成。本质上只要达到计算资源和 IO 资源的最佳实践便是最优解,无所谓普通线程还是虚拟线程。当然,也并不影响用户自行体验虚拟线程。
其二,smart-socket 将通过调整接口定义,帮助用户有意识的达成最佳实践。从过往案例来看,用户能通过 smart-socket 轻松完成通信编程,性能也有不俗的表现。但在三刀看来,若能合理设置内存池,将会充分释放 smart-socket 这只性能怪兽的全部潜力。
至于开源生态,8 年的开源经历已证明三刀并不擅长这方面的工作。所以,我们选择聚焦于自身更擅长的技术优势,让少数有缘之人享受 smart 带来的技术福利。
3、快速上手
3.1 引入 Maven 依赖
<dependencies> <dependency> <groupId>org.smartboot.socket</groupId> <artifactId>aio-core</artifactId> <version>${version}</version> </dependency> </dependencies>
3.2 定义协议
这里提供的示例是一种简单的字符串通信协议,仅作效果演示。实际场景中还需根据通信双方约定的协议实现编解码算法。
import org.smartboot.socket.Protocol; import org.smartboot.socket.transport.AioSession; import java.nio.ByteBuffer; publicclass StringProtocol implements Protocol<String> { @Override public String decode(ByteBuffer readBuffer, AioSession session) { int remaining = readBuffer.remaining(); if (remaining < Integer.BYTES) { returnnull; } readBuffer.mark(); int length = readBuffer.getInt(); if (length > readBuffer.remaining()) { readBuffer.reset(); returnnull; } byte[] b = newbyte[length]; readBuffer.get(b); readBuffer.mark(); returnnew String(b); } }
3.3 启动服务端
服务端通过 System.out
打印客户端传输过来的字符串内容,并将该内容原样传回至客户端。
import org.smartboot.socket.MessageProcessor; import org.smartboot.socket.transport.AioQuickServer; import org.smartboot.socket.transport.WriteBuffer; import java.io.IOException; publicclass StringServer { public static void main(String[] args) throws IOException { MessageProcessor<String> processor = (session, msg) -> { System.out.println("receive from client: " + msg); WriteBuffer outputStream = session.writeBuffer(); try { byte[] bytes = msg.getBytes(); outputStream.writeInt(bytes.length); outputStream.write(bytes); } catch (IOException e) { e.printStackTrace(); } }; AioQuickServer server = new AioQuickServer(8888, new StringProtocol(), processor); server.start(); } }
try-catch中
先后调用 writeInt
、write
是一种协议编码手法,也是从事通信开发必须要理解和掌握的技能。
3.4 启动客户端
客户端与服务端建立 TCP 连接后,便向其发送 hello smart-socket
,当收到服务端的响应消息时,通过 MessageProcessor
的实现类进行控制台打印。
import org.smartboot.socket.MessageProcessor; import org.smartboot.socket.transport.AioQuickClient; import org.smartboot.socket.transport.AioSession; import org.smartboot.socket.transport.WriteBuffer; import java.io.IOException; publicclass StringClient { public static void main(String[] args) throws IOException { MessageProcessor<String> processor = (session, msg) -> System.out.println("receive from server: " + msg); AioQuickClient client = new AioQuickClient("localhost", 8888, new StringProtocol(), processor); AioSession session = client.start(); WriteBuffer writeBuffer = session.writeBuffer(); byte[] data = "hello smart-socket".getBytes(); writeBuffer.writeInt(data.length); writeBuffer.write(data); writeBuffer.flush(); } }
4、我们的用户
smart-socket 开源以来深受广大用户的青睐。其中有世界 500 强的知名企业;也有 Solon 之父(江湖人称单挑 Spring 的男人);还有无数家从事物联网领域的公司。
目前 smart-socket 在 Gitee 上已收获 4K+ Star,Fork 数超 1K;仓库访问量 10+ 万,源码下载量超 4 万。在此衷心感谢各位朋友对 smart-socket 的支持和信任。
篇幅有限,仅展示部分...
5、关于组织
smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。
该组织内的明星项目包括:
smart-socket
历时 5 年精炼出 2 千多行代码,轻松实现百万级长连接的 AIO 通信框架。smart-http
基于 smart-socket 实现的 HTTP/1.1 web 服务。smart-servlet
基于 smart-http 实现的 Servlet 3.1 容器服务。smart-mqtt
基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。smart-flow
一款具备可观测性的轻量级业务编排框架。组织地址:https://smartboot.tech/
代码仓库:https://gitee.com/smartboot
教程篇:
插件篇:
杂篇

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
高性能跨平台网络通信框架 HP-Socket v5.9.4
项目主页:http://www.oschina.net/p/hp-socket 开发文档: https://www.docin.com/p-4478351216.html 下载地址: https://github.com/ldcsaa/HP-Socket v5.9.4 更新 一、主要更新 openssl 升级到 3.0.12 版本 llhttp 升级到 9.1.3 版本 brotli 升级到 1.1.0 版本 HP-Socket 组件列表 基础组件 SSL 组件 HTTP 组件
- 下一篇
开放签电子签章(企业版)V1.1版本更新说明
经过两周的开发测试,开放签电子签章V1.1版本已完成并发布,欢迎大家体验试用,以下是本版本更新内容的说明。 开放签(企业版)体验地址:home.kaifangqian.com 更新内容概览: 为企业用户提供在线文档模板功能,签署过程可使用在线模板,完成文件的多方填写和签署; 为企业用户提供业务线管理功能,通过配置不同的业务线可以实现不同的签署场景,同时通过业务线管理可以使企业的电子文件签署业务更加可控、有序、安全; 运营管理后台增加平台配置模块,可对短信服务、实名认证服务、CA数字证书服务进行配置; 对接CA机构,支持CA数字证书的签发和使用; 优化开放签业务端、企业管理后台部分功能的交互体验; 以下主要对在线文档模板、业务线进行介绍说明。 在线文档模板 1、概述 在线文档模板是一种更加灵活和适应性的在线文档编写工具,通过在模板中设置参数,用户可以根据实际需求选择或填写相关信息,从而快速生成符合特定要求的文档。 2、模板参数说明 (1)参数定义: 在模板中定义参数,使用户可以根据实际情况填写相关信息。例如,在写报告时,可以设置参数如报告主题、报告日期、报告人等。 (2)参数类型: 根据...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启