软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 架构设计 -> Netty入门到精通一 -> 正文阅读
架构设计 最新文章
Opengl教程之读取obj并绘制在picturecontro
读《企业应用架构模式》第五章并发
StepbyStepintoSpring(IOC)
设计模式(2)用例图之一
使用实体组件系统(ECS)开发”吃方块”游戏实
编程学习之简单工厂模式与策略模式
Invalidprojectdescription.
基于Redis实现分布式消息队列(2)
《开源框架那点事儿15》:借船下海还是造船
原型模式——浅复制和深复制

[架构设计]Netty入门到精通一

  2016-04-03 20:43:04

 因为一次工作需要,要从华为的一个区跑到另一个区开会,我终于见到了我心目中的大神(李林锋: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);
}
});
}
}
运行代码看看有没有像我们想象中的那样能够解决问题,




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




我们总结一下,单线程情况下只能有一个客户端,多线程的情况下可以有多个客户端,但非常消耗内存(要招很多前台妹子,公司的资源是有限的,不能不停招前台,虽然对咱们程序猿来说是福利,但对公司来说就是一笔不小的开资,那么我们应该怎么办呢?请看下篇)
上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:42:58  
360图书馆 论文大全 母婴/育儿 软件开发资料 网页快照 文字转语音 购物精选 软件 美食菜谱 新闻中心 电影下载 小游戏 Chinese Culture
生肖星座解梦 人民的名义 人民的名义在线看 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图
中国文化英文 多播视频 装修知识库
2017-4-26 18:02:25
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --