Netty,當前最流行的NIO框架,通訊領域開發的不二之選。通過多年的發展,已在互聯網領域、大數據分佈式計算領域、遊戲行業、通訊行業等得到了普遍的應用,一些業界著名的開源組件也基於Netty的NIO框架構建。目前市面上幾乎找不到同類型能夠與之媲美的通訊框架,可是做爲通訊技術的愛好者,卻向來沒法對其產生親近感。html
我並不否定Netty的確是一款優秀的框架,曾經我也本身寫過NIO框架,深知其實現難度有多大,最終選擇了放棄。Netty的出現爲廣大程序員提供了便利,大大下降了開發高效、穩定服務的難度。至於本人對其無好感,究其緣由有如下幾點(首先申明一下,本人僅曾經簡單使用過netty,並未深刻研究):git
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,出於學習目的則能夠考慮一下本文的主角: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的定位很純粹,僅僅負責協調數據讀寫資源,最大化的發揮系統性能,用戶只需關注協議編解碼以及消息的業務處理。smart-socket不會包攬通訊層面方方面面的功能,但願每個使用smart-socket的朋友,能夠經過它加深對socket的理解與認知。若是您是對Socket技術有濃厚興趣的朋友,很是歡迎體驗如下smart-socket。架構