我和Netty的故事

本文首发于InfoQ架构师杂志。

还在上学的时候,我特别好奇QQ是怎么实现的,为什么我一发消息我的好友马上就能收到且基本没有延迟,它的原理是什么?大三的时候,我学习了Java语言,接触到了Socket编程,不知天高地厚的我当时居然想自己实现个简易QQ,和几个朋友做了技术评估后觉得这个事好像不是那么难,紧接着我们就用Swing以及一些Socket编程知识完成了一个简易的局域网QQ,虽然功能不是那么的稳定,但基本上还是可以实现私聊、群聊、文件传输、抖屏功能。这也许是我第一次接触网络通信,核心功能部分使用了同步I/O的Socket类库。

参加工作后,公司使用的RPC框架是Hessian,Hessian是一款基于HTTP协议的RPC框架,采用的是二进制RPC协议,但是在Java中,Hessian的服务端需要使用Tomcat之类的容器,而它们的性能总是那么的不如人意。因为那会公司使用的MVC框架是Play,所以我很早就接触到了Netty,它的高性能、高可靠性的特性早有耳闻。看了Play框架中Netty部分的代码以及Netty的官方案例后,我用Netty重新实现了Hessian的服务端,于是一款构建于Netty和Hessian基础上的高性能的RPC框架诞生了,我取名叫Hetty(Hessian+Netty)。简单的性能测试之后,我发现Hetty的性能是之前的4~5倍,这次之后,我对Netty有了更深入的了解,使用Netty可以更简单的开发出高性能、可扩展、易读易维护的系统。

再到后来,我去了一家游戏公司,发现他们在服务器端大量使用了Netty框架,从来没有想到Netty在游戏行业已经得到了这么大范围的使用。不过再仔细想想,这一点都不惊奇,游戏服务器端,除了大量的业务逻辑外,其它部分其实都在玩NIO,而Netty作为一款成熟的异步NIO通信框架,它的性能、扩展性、稳定性、使用难度都得到了业界的肯定。那Netty有哪些优点了?我认为有以下几点:

  1. 文档齐全,社区活跃,API简单,案例很多。
  2. 支持多种协议,如HTTP、FTP、SMTP。
  3. 性能高,易扩展。
  4. 周期性的版本迭代,成熟且稳定。

这么一看,工作生活中处处与Netty为伴,其实是Netty见证了我的成长,希望好的框架能让更多的人收益!

时间: 2024-09-20 00:59:35

我和Netty的故事的相关文章

《Netty 权威指南》—— 选择Netty的理由

声明:本文是<Netty 权威指南>的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文. 在开始本节之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果2个多月过去了,他们的NIO服务端始终无法稳定,问题频出.由于NIO通信是它们的核心组件之一,因此,项目的进度受到了严重的影响,领导对此非常恼火.另一个项目组直接使用Netty作为NIO服务端,业务的定制开发工作量非常小,测试表明,功能和

金庸笔下的爱情故事

 飞雪连天射白鹿,笑书神侠倚碧鸳.金庸先生不仅让我们结识了众多神采各异的风流人物,更让我们领略了许多感天动地的爱情故事,其余音绕梁,何止三日不绝?   相见欢: 芙蓉恋了春朝,桃花飘. 负气离家与君共良宵. 习武穆,挎金刀,保宋朝. 岂知英雄不只射大雕.           她不嫌弃他笨拙愚钝,他也不厌恶她奸诈狡猾,他们,天生就是一对儿.           若没有郭靖的老实善良,也许黄蓉会变成一个满肚子坏水儿的妖女:若没有黄蓉的聪明伶俐,也许郭靖会遭人凌辱.受人欺负.            

HDU4501-小明系列故事——买年货

小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2221    Accepted Submission(s): 995 Problem Description 春节将至,小明要去超市购置年货,于是小明去了自己经常去的都尚超市. 刚到超市,小明就发现超市门口聚集一堆人.用白云女士的话说就是:"那家伙,那场面,真是人

黑客 Only_guest 亲身讲述的三个“非主流诈骗”故事 | FIT 2017专题

   雷锋网按:Only_guest 张瑞冬,FIT 2017大会上号称"无人敢说不帅的白帽子",双螺旋攻防实验室负责人.PKAV团队负责人,既是四川大学特聘网络安全专家,也是民间最具影响力的白帽子之一. FIT 互联网安全创新大会,是由安全媒体 FreeBuf 主办的安全峰会.安全领域年度重磅成果和创新的互联网安全技术会在这里展示. 两年前,怀着一颗拯救世界的心,Only guest 投身于自己的反诈骗事业.这个能轻松搞到马云马化腾周鸿祎的住址和电话,还曾经定位全成都的出租车轨迹的男

Netty4详解三:Netty架构设计

     读完这一章,我们基本上可以了解到Netty所有重要的组件,对Netty有一个全面的认识,这对下一步深入学习Netty是十分重要的,而学完这一章,我们其实已经可以用Netty解决一些常规的问题了. 一.先纵览一下Netty,看看Netty都有哪些组件?      为了更好的理解和进一步深入Netty,我们先总体认识一下Netty用到的组件及它们在整个Netty架构中是怎么协调工作的.Netty应用中必不可少的组件: Bootstrap or ServerBootstrap EventLo

三个经典的数据分析故事,你都知道吗?

今天给大家分享三个数据分析的经典案例,主要是学**其中的思路,当故事看吧,不要拘泥于文中故事的真实性.每个故事我简单的做一个点评吧 1 数据分析大神 高手在民间 这天,新上任的邢县长到小吃摊吃早餐,刚找个板凳坐下,就听炸油条的胡老头一边忙活一边唠叨:"大家吃好喝好哦,城管要来撵摊儿了,起码三天你们捞不着吃咱炸的油条了!" 邢县长心里一惊:省卫生厅领导最近要来视察,昨天下午县里才决定明后两天开展突击整治,这老头儿怎么今天一早就知道了? 哪料这件事还没弄明白,另一件事儿让县长脑袋里的问号更

Flink运行时之基于Netty的网络通信(下)

客户端核心处理器 这一篇,我们分析一下客户端协议栈中的核心的处理器PartitionRequestClientHandler,该处理器用于处理服务端的响应消息. 我们以客户端获取到响应之后回调该处理器的channelRead方法为入口来进行分析: public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { try { //当没有待解析的原始消息时,直接解码消息,否则将消息加入到stagedMe

netty服务端接收到中文通信乱码问题

问题描述 netty服务端接收到中文通信乱码问题 不多说 问题如题 以下是服务端代码 public void channelRead(ChannelHandlerContext ctx, Object msg) { try { ByteBuf buf = (ByteBuf) msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req, "UTF-8")

王勇详谈 Linux Deepin 背后的故事

采访嘉宾:王勇,Linux Deepin技术开发负责人.Emacs玩家,熟悉 C.Python.JS.elisp.Java.Haskell 等语言, 擅长于图形化程序开发.Linux Deepin有些什么样的故事?请听王勇细细道来! 能否先介绍一下你自己(技术背景.工作经历.学习经历)? 王勇:大家好, 我叫王勇.我从07年的时候开始玩 Linux,当时在成都,玩了以后感觉挺有兴趣,就开始研究 Emacs.后来参与了 Emacs 开发大约2年时间,开发了很多 Emacs 的插件.当时天天在IRC