距离上一个版本《smart-socket v1.0.1 发布:12 个文件 541 行代码的 AIO 框架》的发布已有20多天,经过这段时间的精雕细琢,smart-socket v1.1.0今日正式发布。
本次更新没有开发新的接口,依旧在代码质量上进行持续改进。对于框架内部一些不合理的设计进行了优化,并简化了数据通信算法,提升了代码可读性。如果你看不懂代码,尽管吐槽我
。
附赠源码深度解读:http://smartsocket.mydoc.io/
1、代码统计:
只有514行代码,就是那么任性。
2、更新日志:
添加Apache LICENSE
剔除会话状态枚举SessionStatus
精简服务配置项
重构数据输出算法
更新代码署名,从今以后一万年,你们都会记住我的名字,老子的名字叫三刀!
3、性能测试
服务端接受并响应消息,一分钟内流入、流出流量各6G+,处理消息数2亿+

服务端只接受消息,一分钟内流入流量12G+,处理消息数4亿+。

4、未来规划
smart-socket在通信层面的实现基本趋于稳定,接下来会基于该框架实现RPC功能,并逐渐支持各类协议的编解码。最后,非常期望开源社区的朋友能反馈您对于smart-socket的意见,帮助我改进它,让它变得更加完善。
引用来自“lblin”的评论
大神,服务端响应后write到客户端的操作在哪啊,没看到这一步引用来自“三刀蜀黍”的评论
客户端的消息接受处理类是DetectRespMessageHandler,你可以把这个类里的System.out放开观察引用来自“lblin”的评论
大神,服务端响应后write到客户端的操作在哪啊,没看到这一步引用来自“之渊”的评论
支持,不知道和 t-io 有什么区别?引用来自“lblin”的评论
源码中客户端关闭channelgroup的时候显示 //仅Client内部创建的ChannelGroup需要shutdown。然后还判断了if ChannelGroup不为null才执行shutdown,但是server中没有进行if判断就执行ChannelGroup的shutdown。为什么2个类中执行不一致。切注释说明也前后不一致。(仅Client内部创建的ChannelGroup需要shutdown。实际上server内部创建的不也shutdown了么)引用来自“三刀蜀黍”的评论
Client支持外部传入AsynchronousChannelGroup对象。如果是外部传入的,是没有赋值到成员变量asynchronousChannelGroup,所以关闭的时候要进行if判断。至于两者实现不一致,是因为通常我们只会启动一个服务端,这样的话服务端就没必要支持外部传入了。而客户端有可能启动多个,所以通过外部传入AsynchronousChannelGroup实现资源共享引用来自“lblin”的评论
谢谢,知道了。然后这段代码
serverSocketChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
@Override
public void completed(final AsynchronousSocketChannel channel, Object attachment) {
serverSocketChannel.accept(attachment, this);
//连接成功则构造AIOSession对象
new AioSession<T>(channel, config, aioCompletionHandler, true);
}
serverSocketChannel.accept 不是被递归调用了么
引用来自“三刀蜀黍”的评论
serverSocketChannel.accept(attachment, this)其实是注册accpet事件的处理回调对象。注册行为不会引发递归调用的,还有疑惑的话可以反编译看看这一块JDK源码就会消除顾虑了的引用来自“lblin”的评论
源码中客户端关闭channelgroup的时候显示 //仅Client内部创建的ChannelGroup需要shutdown。然后还判断了if ChannelGroup不为null才执行shutdown,但是server中没有进行if判断就执行ChannelGroup的shutdown。为什么2个类中执行不一致。切注释说明也前后不一致。(仅Client内部创建的ChannelGroup需要shutdown。实际上server内部创建的不也shutdown了么)引用来自“三刀蜀黍”的评论
Client支持外部传入AsynchronousChannelGroup对象。如果是外部传入的,是没有赋值到成员变量asynchronousChannelGroup,所以关闭的时候要进行if判断。至于两者实现不一致,是因为通常我们只会启动一个服务端,这样的话服务端就没必要支持外部传入了。而客户端有可能启动多个,所以通过外部传入AsynchronousChannelGroup实现资源共享引用来自“lblin”的评论
谢谢,知道了。然后这段代码
serverSocketChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
@Override
public void completed(final AsynchronousSocketChannel channel, Object attachment) {
serverSocketChannel.accept(attachment, this);
//连接成功则构造AIOSession对象
new AioSession<T>(channel, config, aioCompletionHandler, true);
}
serverSocketChannel.accept 不是被递归调用了么
引用来自“lblin”的评论
源码中客户端关闭channelgroup的时候显示 //仅Client内部创建的ChannelGroup需要shutdown。然后还判断了if ChannelGroup不为null才执行shutdown,但是server中没有进行if判断就执行ChannelGroup的shutdown。为什么2个类中执行不一致。切注释说明也前后不一致。(仅Client内部创建的ChannelGroup需要shutdown。实际上server内部创建的不也shutdown了么)引用来自“三刀蜀黍”的评论
Client支持外部传入AsynchronousChannelGroup对象。如果是外部传入的,是没有赋值到成员变量asynchronousChannelGroup,所以关闭的时候要进行if判断。至于两者实现不一致,是因为通常我们只会启动一个服务端,这样的话服务端就没必要支持外部传入了。而客户端有可能启动多个,所以通过外部传入AsynchronousChannelGroup实现资源共享然后这段代码
serverSocketChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
@Override
public void completed(final AsynchronousSocketChannel channel, Object attachment) {
serverSocketChannel.accept(attachment, this);
//连接成功则构造AIOSession对象
new AioSession<T>(channel, config, aioCompletionHandler, true);
}
serverSocketChannel.accept 不是被递归调用了么
引用来自“lblin”的评论
源码中客户端关闭channelgroup的时候显示 //仅Client内部创建的ChannelGroup需要shutdown。然后还判断了if ChannelGroup不为null才执行shutdown,但是server中没有进行if判断就执行ChannelGroup的shutdown。为什么2个类中执行不一致。切注释说明也前后不一致。(仅Client内部创建的ChannelGroup需要shutdown。实际上server内部创建的不也shutdown了么)引用来自“吕兵阳”的评论
博主,那个博客进去里面是空的引用来自“三刀蜀黍”的评论
@吕兵阳 哪个博客?麻烦贴一下地址引用来自“吕兵阳”的评论
博主,那个博客进去里面是空的引用来自“开源狂人”的评论
恕我直言,学习价值非常高,毕竟现在开发都喜欢用nio,不管需求是不是这样,总会用一些主流技术Mina、netty之类的。