月度归档:2016年10月

Netty简明教程

点击量:1180

在阅读了netty-4.0.0-final的源码以及参考了《Netty in Action v5 MEAP》这本书之后,决定写一篇文章记录这几天的心得体会,介绍下netty的相关知识。但并不会面面俱到地阐述每一个细节,只会记录一些个人认为非常重要的部分,比如其线程模型,关键组件,以及使用方法等。

一.Netty是什么?

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

以上这个定义来自百度百科,简单来说Netty就是一个服务器端的网络通信框架,用于处理网络请求,和你自己写一个简单的服务器没什么本质上的区别,只不过Netty做的更强大。因为它是一个基于网络IO的通信框架,不受限于网络协议,所以他的应用范围就很广。比[……]

继续阅读

Netty ChannelHandler使用报错

点击量:3144

最近在研究和学习Netty,按照书上的教程写了一个很简单的demo,但是运行却报错了,代码如下:

启动好了之后,浏览器输入:http://127.0.0.1:7777?x=1&y=2 ,但是令人奇怪的是这个服务器只能接受一次请求,后面的请求均会产生如下的报错:

按照报错的提示,原因就是这个channelHandler没有使用@Shareable注解,加上之后果然问题解决了。但是到这里我的疑问并没有得到解决,为什么这个handler必须要加上@Shareable注解?这一步步到底是怎么回事?经过几次断点,再结合阅读源码,总算是搞清楚为什么了。
首先来看抛出异常的方法DefaultChannelPipeline->checkMultiplicity,代码如下:

这段代码很简单,如果这个handler被加过了,也就是h.adder=true,并且不是[……]

继续阅读