首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

运用Netty构建一个多线程服务器与客户端(一)

2012-07-22 
使用Netty构建一个多线程服务器与客户端(一)发此篇博客的目的是,如果有网络通讯方面的大牛看到,希望能给与

使用Netty构建一个多线程服务器与客户端(一)
发此篇博客的目的是,如果有网络通讯方面的大牛看到,希望能给与一些指导.

我相信很多人都能用netty开发出自己的客户端和服务器,但是,此服务器和客户端的可重用性有多高呢?我一直想弄个性能还算不错,然后其他人在此架构上做简单的命令处理即可.

开发这个服务器和客户端的原因是正是如此,也可以说是一个简单的网络平台.让其具备一定的2次开发功能.

以下代码只是一个初步是设想,有兴趣的朋友我们可以一起讨论讨论.

如果你完全不了解netty,请先自己学习一下.^_^,因为我也是菜鸟,无法解释那么多的类是干什么的.^_^

关于netty的下载和其他个jar请自行下载

首先是服务器的初步实现.因为Netty是基于事件的,再加上其无阻塞的特性.我们必须要牢记:

数据发送后,代码不会被阻塞,而是顺序运行,也就是说,做了一件事件后,这件事情不一定已经成功,所以我们不能在下一行代码中百分百的确定其已经发送到了对方,因此,你会发行其很多方法都会返回一个"Future".只要注意到这一点,Netty的使用难度就不是很大了.

(一)handler处理篇
首先,是handler,初次接触netty的朋友要注意,handler不是一个单例.即每个channel下都会有自己的一个handler实例.



到此,一个简单的可扩展handler的服务器雏形就出来了

下面,我们添加一个自定义的服务器处理handler进来
public class Server {    public static void main(String[] args) throws DocumentException {        ServerBootstrap bootstrap = new ServerBootstrap(                new NioServerSocketChannelFactory(                Executors.newCachedThreadPool(),                Executors.newCachedThreadPool()));        bootstrap.setPipelineFactory(new ServerPipelineFactory());        //因为我要用到长连接        bootstrap.setOption("child.tcpNoDelay", true);        bootstrap.setOption("child.keepAlive", true);                ServerConfig config = ServerConfig.getInstance();        bootstrap.bind(new InetSocketAddress(Integer.valueOf(config.port())));    }}


总结:在整个服务器编码中,刚开始会遇到"远程主机强迫关闭了一个现有的连接。"等这类错误,最后修改成"相互告知对方我要关闭了"再进行关闭就可以了.

最后再完善一下异常处理即可.

热点排行