`
longzhun
  • 浏览: 360656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Netty入门到精通一(转)

阅读更多

 因为一次工作需要,要从华为的一个区跑到另一个区开会,我终于见到了我心目中的大神(李林锋:Netty中国推广者,现华为技术有限公司平台中间件架构与设计部设计师),喜欢技术的我迫不及待的和他交流了起来,大神的技术果然牛逼,小弟膜拜中,大牛给我讲解了很多设计思想,在我遇到大部分开发者中,大多交流技术,用了什么什么技术,然后觉得很牛逼,经过和大牛交流后,才明白设计思想很重要,很多人注重用神马神马框架,神马神马技术,却不知道框架设计思想,为什么这么设计,这或许就是设计师和码农的区别吧(本人也只敢称自己是码农( ><),和大神交流后感觉自己弱爆了),一个好的产品是有设计思想和灵魂的,好吧这里我们就不扯蛋了。

     好吧说说我为什么写下这篇文章吧,因工作需要,本人需要用到Netty,正好遇到了些问题,这是我就想起了大神,大神太忙了等了许久才回了我邮件(华为内部邮箱,华为内部不允许上网( ><) ),下班后在网上找了一些资料,发现大多要不不是很全,要不就很笼统,让人不好理解,看电子书很蛋疼吧,领导还安排有别的任务呢,再说相信对于初学者来说也遇到不少问题吧,然后自己资料整理了一下,写下此文章,本人会不定期的更新Netty文章,所以要有耐心一点,最好关注一下我的微博,当然心急吃不了热豆腐,有神马技术上的问题也可以一起交流,本人CSDN博客Jimmy_zjf888,觉得写的不错的给个赞,送上鲜花,当然写的差的别吐槽丢大便就好。

 首先我们要知道神马是Netty,我们为什么要用Netty,Netty的优势是神马?

 

 Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性,那么NIO和传统IO有神马区别呢?下面我们来看看代码吧,这里的客户端和服务端我就用公司前台和参观客户做例子吧.

/**

 * 传统socket服务端

 * @author -Jimmy_zjf888-

 *

 */

public class OrdinaryServer {

public static void main(String[] args)throws Exception {

//创建socket服务,打开并监听8888端口

ServerSocket server=new ServerSocket(8888);

while(true){

//获取一个套接字(阻塞)

final Socket socket = server.accept();

System.out.println("来个一个新客户!");

//前台妹子给客人端茶倒水

handler(socket);

}

}

 

/**

 * 读取数据

 * @param socket

 * @throws Exception

 */

public static void handler(Socket socket){

try {

byte[] bytes = new byte[1024];

//获取socket的一个输入流

InputStream inputStream = socket.getInputStream();

 

while(true){

//循环读取读取数据(阻塞)

int read = inputStream.read(bytes);

if(read != -1){

System.out.println(new String(bytes, 0, read));

}else{

break;

}

}

catch (Exception e) {

e.printStackTrace();

}finally{

try {

socket.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

}

 

我们运行一下如上代码,打开debug模式


 

哎哟一开始就发现final Socket socket = server.accept();代码执行到这一句的时候就开始阻塞了,这时我们用控制台的telnet去模拟吧

 

,然后回车,发现代码往下执行了,哎哟发现int read = inputStream.read(bytes);执行到这一句就阻塞了


 

总结了一下传统的IO2个阻塞点一个系server.accept()的时候阻塞,另外一点系

nputStream.read(bytes)的时候阻塞,如果这么阻塞下去,如果有别的客人也来咱们公司参观的话,是不是那个前台妹子就不能照顾那个客人了?对没错的,我们再telnet一下试试

 

 

发现有新的客人来的时候我们的前台,只能照顾不周了,因为她在忙着照顾她第一个客人,那么我们该怎么办呢?是不是得多招几个前台妹子啊?听到这里有点小激动,又招妹子了,来看看怎么实现把,首先我们需要一个前台管理员,当客人来的时候能够负责分配空闲的前台去照顾客人对吧,代码如下。。。

public static void main(String[] args)throws Exception {

//创建一个线程池

ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();

//创建socket服务,打开并监听8888端口

ServerSocket server=new ServerSocket(8888);

while(true){

//获取一个套接字(阻塞)

final Socket socket = server.accept();

System.out.println("来个一个新客户!");

//派送空闲的前台妹子去接待客人

newCachedThreadPool.execute(new Runnable() {

@Override

public void run() {

//前台妹子给客人端茶倒水

handler(socket);

}

});

}

}

运行代码看看有没有像我们想象中的那样能够解决问题,


 

我们再来一次,看看问题还会不会存在


 

我们总结一下,单线程情况下只能有一个客户端,多线程的情况下可以有多个客户端,但非常消耗内存(要招很多前台妹子,公司的资源是有限的,不能不停招前台,虽然对咱们程序猿来说是福利,但对公司来说就是一笔不小的开资,那么我们应该怎么办呢?请看下篇)

分享到:
评论

相关推荐

    netty入门到精通.txt

    netty入门到精通

    Netty入门教程文档

    Netty入门教程

    netty从入门到精通所有代码

    netty从入门到精通所有代码

    自己学习netty的笔记和Demo

    netty入门到精通学习笔记和demo

    Netty开发视频教程

    非常详细的Netty视频教程,Netty入门到精通首选

    韩顺平循序渐进学java从入门到精通课件笔记

    韩顺平_循序渐进学java_从入门到精通_课件_笔记_第三十五讲到第三十七讲.txt )

    Netty权威指南(第2版)

    内容不仅包含Java NIO入门知识、Netty 的基础功能开发指导、编解码框架定制等,还包括私有协议栈定制和开发、Netty 核心类库源码分析,以及Netty 的架构剖析。 《Netty 权威指南(第2 版)》适合架构师、设计师、...

    NettyInAction中文版

    NettyInAction中文版,共13章,从入门到精通。Netty介绍 为什么要使用non-blocking IO(NIO) 阻塞IO(blocking IO)和非阻塞IO(non-blocking IO)对比 Java NIO的问题和在Netty中的解决方案 Netty是基于Java NIO的网络...

    Netty权威指南 第2版 带书签目录

    内容不仅包含Java NIO入门知识、Netty 的基础功能开发指导、编解码框架定制等,还包括私有协议栈定制和开发、Netty 核心类库源码分析,以及Netty 的架构剖析。 《Netty 权威指南(第2 版)》适合架构师、设计师、...

    JAVA学习资源1.0

    1.Java 并发编程从入门到精通 2.并发编程实战 3.算法 4.高效程序员的45个习惯 5.深入java虚拟机 6.阿里巴巴JAVA开发手册 7.Java核心技术 卷1 基础篇 8.Netty_in_Action 9.java性能优化 10.spring源码解析 11.java 8...

    高级java笔试题-EBook-PDF:ITPDF电子书

    Shell编程从入门到精通.张昊.pdf Scala SCALA程序设计-JAVA虚拟机多核编程实战5.pdf JavaWeb MyBatis技术.pdf Spring MVC学习指南(第2版).pdf 看透springMvc源代码分析与实践.pdf 深入浅出MyBatis技术原理与实战....

    深入java虚拟机源码-books-recommendation:后端进阶经典图书

    DOCKER技术入门与实战 Docker容器与容器云第2版 NET_CLR_via_C#(第4版) elk-stack-guide-cn Go并发编程实战_第2版_郝林 Go语言学习笔记_雨痕 go-internals-zh steal 图解HTTP+彩色版 深入理解JVM&G1GC Java并发编程...

Global site tag (gtag.js) - Google Analytics