内容简介:每日一博 | 再见,Netty!你好,smart-socket!
再见,Netty
Netty,当前最流行的NIO框架,通信领域开发的不二之选。经过多年的发展,已在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。目前市面上几乎找不到同类型可以与之媲美的通信框架,但是作为通信技术的爱好者,却向来无法对其产生亲近感。
我并不否认Netty的确是一款优秀的框架,曾经我也自己写过 NIO框架 ,深知其实现难度有多大,最终选择了放弃。Netty的出现为广大 程序员 提供了便利,大大降低了开发高效、稳定服务的难度。至于本人对其无好感,究其原因有以下几点(首先申明一下,本人仅曾经简单使用过netty,并未深入研究):
-
复杂;以下代码摘录自 Netty官网
,初看代码,应该大部分人对于run方法比较费解。
EventLoopGroup
是干嘛的?bossGroup
和workerGroup
是什么关系?childHandle
入参如此复杂!ch.pipeline().addLast(new DiscardServerHandler())
实现的是什么功能?等等...。总之,这一个方法会引发你诸多疑惑。
public class DiscardServer { private int port; public DiscardServer(int port) { this.port = port; } public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (3) .childHandler(new ChannelInitializer<SocketChannel>() { // (4) @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new DiscardServerHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) // (5) .childOption(ChannelOption.SO_KEEPALIVE, true); // (6) // Bind and start to accept incoming connections. ChannelFuture f = b.bind(port).sync(); // (7) // Wait until the server socket is closed. // In this example, this does not happen, but you can do that to gracefully // shut down your server. f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { int port; if (args.length > 0) { port = Integer.parseInt(args[0]); } else { port = 8080; } new DiscardServer(port).run(); } }
- 臃肿;下载Netty源码后,你会看到它的工程里有二十几个模块。发展了这么多年,它已然成了一个庞然大物。再加上其高深的设计哲学,以致于吾等凡夫俗子难以通过阅读源码领悟其精髓。
- 面试必问;有过几年工作经历后再去面试,基本都会遭遇被问及Netty相关问题的情况。似乎没用过Netty你就不是一个合格的程序猿,不懂Netty线程模型就要给你的技术能力打上一个问号。亲身经历,不爽!也不屑去背网上那些相关的理论,不务实。
- Netty解决了人们工作上的困扰,但同时它也限制了很多 Java 开发人员的技术成长。有些同学花费几十元RMB购买Netty相关的书籍,可无论书读的有多么透彻,也只是茶余饭后与同行有一些谈资,又不能让你也有能力写一个Netty出来。
Netty是一条横跨在你与通信领域之间的河,你可以远观河对岸的景色,却无法近距离感受其魅力。结合对Netty的个人成见,是时候跟Netty说再见了,或者说回头见。工作中可以采用Netty,出于学习目的则可以考虑一下本文的主角:smart-socket。
你好,smart-socket
这也是一款通信框架,而且是一款没有资格与Netty相提并论的国产开源项目,至少现阶段是如此。smart-socket是学习的产物,是作者在学习AIO过程中逐渐优化改进而成。本文的目的也是希望可以把smart-socket介绍给大家,让大家了解到有那么一波人,不安于已有的优质解决方案,致力于通过重复造轮子的形式,为这个开源社区注入新鲜血液。
Java于1.7版本提供了AIO通信API,Netty曾经也发布过AIO版,但最终还是选择了放弃,据说是由于性能改善并不显著。但通过开发smart-socket,本人有一点愚见。Java AIO已经将Socket编程门槛降到了一个非常低的程度。只要该技术点得到普及,会有很多AIO框架如雨后春笋般冒出来,有点技术能力的朋友都可以开发一套属于自己的通信框架。而Netty基于AIO的实现方案,相当于革了自己的命,在NIO上实现异步非阻塞通信并达到目前这种成就所付出的成本不言而喻,但AIO却让这一切来得非常低廉,致使Netty陷入了进退两难的局面,总不好舍弃过去在NIO模式上的付出吧。纯属个人YY,不喜勿喷,哈哈。
smart-socket经历了五个月的发展,并在开源中国平台上发布了四个版本,始终秉持着极简、易用、高性能的原则。项目可从码云中下载: smart-socket ,欢迎各位下载。接下来正式开始王婆卖瓜,自卖自夸。
-
极简
何为“简”,代码量少即为“简”。smart-socket初期的实现仅用了 11个文件 , 514行代码 。这样的一款框架应该极具吸引力了吧,意味着你只要理解这514行代码,就可以彻底掌握AIO技术。不过随后的版本中增加了一些辅助编解码的 工具 类,导致代码量有所增加,但还是不到800行。 -
易用
何为“易”,学之轻松,使之便捷即为“易”。smart-socket只需熟悉三个接口(Filter、MessageProcessor、Protocol),三个类(AioSession、AioQuickServer、AioQuickClient)即可玩转Socket。 -
高性能
参见《 每秒处理 500W 条消息,人、机为之颤抖 》,不少朋友不认可这种测试方式。假设采用同样的测试方式,Netty每秒处理400W,那smart-socket这500W的数据是否更有说服力。
此处再提供一份某网友的测试数据,该网友测试的关注点在于smart-socket建立连接的性能:- 测试环境: CPU E3-1231 v3 @ 3.40GHz,8核,内存16G
- 测试结果:每秒处理8000个长连接请求,服务器总连接数达18W(调整配置项后每秒建立连接数1W左右)
smart-socket的定位很纯粹,仅仅负责协调数据读写资源,最大化的发挥系统性能,用户只需关注协议编解码以及消息的业务处理。smart-socket不会包揽通信层面方方面面的功能,希望每一个使用smart-socket的朋友,可以通过它加深对socket的理解与认知。如果您是对Socket技术有浓厚兴趣的朋友,非常欢迎体验以下smart-socket。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 再见2018,你好2019
- 再见CoffeeScript,你好TypeScript
- 再见CoffeeScript,你好TypeScript
- 再见,Python!你好,Go 语言
- Chromium Blog:再见 PNaCI,你好 WebAssembly!
- Chromium Blog:再见 PNaCI,你好 WebAssembly!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Paradigms of Artificial Intelligence Programming
Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95
Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!