smart-socket v1.4.9 发布,重构 UDP 通信
smart-socket 是一款国产开源的 Java AIO 框架,追求代码量、性能、稳定性、接口设计各方面都达到极致。如果 smart-socket 对您有一丝帮助,请 Star 一下我们的项目并持续关注;如果您对 smart-socket 并不满意,那请多一些耐心,smart-socket 一直在努力变得更好。
更新内容
- bug修复:修复内存池特定场景下数组越界问题,影响范围:1.4.0+。
- bug修复:修复WriteBuffer#write,WriteBuffer#writeByte并发条件下偶发异常问题,影响范围:1.4.0+。
- 更新:重构UDP代码。
smart-socket自 v1.4.4 版本开始提供UDP的支持,不过代码设计的比较复杂,有违 smart-socket 一贯强调极简、易用、高性能的原则。故此次大刀阔斧进行了一番重构,其中参考了部分 Java AIO 的内核设计思路,仅用 5 个Java 源文件便达到了预期的效果。
原先熟悉 smart-socket TCP 开发的用户可以比较快的上手 UDP 开发,都是基于 Protocol、MessageProcessor 两个接口进行开发。同时也意味着如果你是采用 smart-socket 进行通信开发,只需少量的调整便可在 TCP 和 UDP 之间进行切换。
Maven
<dependency>
<groupId>org.smartboot.socket</groupId>
<artifactId>aio-pro</artifactId>
<version>1.4.9</version>
</dependency>
示例demo
public class UdpDemo {
public static void main(String[] args) throws IOException {
AbstractMessageProcessor<String> processor = new AbstractMessageProcessor<String>() {
@Override
public void process0(AioSession channel, String msg) {
try {
InetSocketAddress remoteAddress = channel.getRemoteAddress();
if (remoteAddress.getPort() == 9999) {
System.out.println(channel + " receive response:" + msg);
} else {
System.out.println("server receive request:" + msg);
WriteBuffer buffer = channel.writeBuffer();
byte[] bytes = msg.getBytes();
buffer.writeInt(bytes.length);
buffer.write(bytes);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void stateEvent0(AioSession session, StateMachineEnum stateMachineEnum, Throwable throwable) {
if (throwable != null) {
throwable.printStackTrace();
}
}
};
//服务端
final UdpBootstrap<String> bootstrap = new UdpBootstrap<String>(new StringProtocol(), processor);
bootstrap.setThreadNum(Runtime.getRuntime().availableProcessors());
bootstrap.setReadBufferSize(1024);
bootstrap.open(9999);
System.out.println("启动成功");
//客户端
int i = 10;
final SocketAddress remote = new InetSocketAddress("localhost", 9999);
while (i-- > 0) {
new Thread(() -> {
try {
int count = 100;
UdpChannel<String> channel = bootstrap.open();
AioSession<String> aioSession = channel.connect(remote);
WriteBuffer writeBuffer = aioSession.writeBuffer();
while (count-- > 0) {
byte[] msg = ("HelloWorld" + count).getBytes();
writeBuffer.writeInt(msg.length);
writeBuffer.write(msg);
writeBuffer.flush();
}
System.out.println("发送完毕");
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
}
当然,还是要负责任的提醒各位,现阶段不保证 UDP 功能无 bug,但一旦发现 bug 保证会在第一时间解决。
最后
无论你是从事物联网还是互联网,需要采用TCP或者UDP进行通信框架,smart-socket 都会是比较不错的选择。另外,一款基于 smart-socket 开发的首款商业化产品即将面世,请关注 smart-socket gitee仓库。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java程序的方法设计
一、方法的定义 我们在学习Java编程以后接触到的第一个程序就是"Hello World”,在这当中涉及到两个主要的结构:类和main方法,当时我们只是说明了main方法是程序的入口,那么当我们想要自己定义一个方法时应该如何下手呢? 1. 概念与作用 首先我们要明确方法的概念和作用,从名称上来说,方法也可以被称为函数,是用来解决同一类的问题的。从代码的结构上来说,定义方法可以减少重复的代码,也能使得整个程序结构更加清爽。 假如我们需要计算两个数的加和: public class Test{ public static void main(String[] args){ // 定义两个变量,so easy int a = 10,b = 5; int c = a + b; System.out.println(c);// 15 } } 如果我们需要多次反复执行同一个逻辑,那么就会产生很多相同的代码: public class Test{ public static void main(String[] args){ int a = 10,b = 5; int c = 20,d = 10; ...
-
下一篇
Guns 6.1 发布,更简洁的后台管理系统
本次更新主要是为升级框架架构,升级UI界面! Guns 6.1更新说明: 前端框架升级easyweb 3.1.7 更换登录界面的UI,增加锁屏功能 通知管理的详情集成富文本UEditor 更新了部分主题样式 增加在线数据源配置功能,使用多数据源更加方便 新调整项目整体的异常拦截,异常返回提示信息更加丰富 完善后端参数校验机制,使用validator注解,增加了一些自定义校验demo 增加在线数据源配置功能,使用多数据源更加方便 项目模块重构,分层更加清晰 Guns 介绍: Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + spring security + jwt+ mybatis-plus + beetl! Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架!
相关文章
文章评论
共有0条评论来说两句吧...