您的位置:首页 > 编程语言 > Java开发

Java NIO框架Netty教程(一) Hello Netty

2013-07-02 00:13 441 查看
先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。

如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手。

view
source

print?

01.
/**


02.
*
Netty 服务端代码


03.
*


04.
*
@author lihzh


05.
*
@alia OneCoder


06.
*
@blog http://www.coderli.com


07.
*/


08.
public
class
HelloServer
{


09.


10.
public
static
void
main(String
args[]) {


11.
//
Server服务启动器


12.
ServerBootstrap
bootstrap =
new
ServerBootstrap(


13.
new
NioServerSocketChannelFactory(


14.
Executors.newCachedThreadPool(),


15.
Executors.newCachedThreadPool()));


16.
//
设置一个处理客户端消息和各种消息事件的类(Handler)


17.
bootstrap.setPipelineFactory(
new
ChannelPipelineFactory()
{


18.
@Override


19.
public
ChannelPipeline
getPipeline()
throws
Exception
{


20.
return
Channels.pipeline(
new
HelloServerHandler());


21.
}


22.
});


23.
//
开放8000端口供客户端访问。


24.
bootstrap.bind(
new
InetSocketAddress(
8000
));


25.
}


26.


27.
private
static
class
HelloServerHandler
extends
SimpleChannelHandler
{


28.


29.
/**


30.
*
当有客户端绑定到服务端的时候触发,打印"Hello world,I'm server."


31.
*


32.
*
@alia OneCoder


33.
*
@author lihzh


34.
*/


35.
@Override


36.
public
void
channelConnected(ChannelHandlerContext
ctx,


37.
ChannelStateEvent
e) {


38.
System.out.println(
"Hello
world,I'm server."
);


39.
}


40.
}


41.
}


42.
/**


43.
*
Netty 客户端代码


44.
*


45.
*
@author lihzh


46.
*
@alia OneCoder


47.
*
@blog http://www.coderli.com


48.
*/


49.
public
class
HelloClient
{


50.


51.
public
static
void
main(String
args[]) {


52.
//
Client服务启动器


53.
ClientBootstrap
bootstrap =
new
ClientBootstrap(


54.
new
NioClientSocketChannelFactory(


55.
Executors.newCachedThreadPool(),


56.
Executors.newCachedThreadPool()));


57.
//
设置一个处理服务端消息和各种消息事件的类(Handler)


58.
bootstrap.setPipelineFactory(
new
ChannelPipelineFactory()
{


59.
@Override


60.
public
ChannelPipeline
getPipeline()
throws
Exception
{


61.
return
Channels.pipeline(
new
HelloClientHandler());


62.
}


63.
});


64.
//
连接到本地的8000端口的服务端


65.
bootstrap.connect(
new
InetSocketAddress(


66.
"127.0.0.1"
,
8000
));


67.
}


68.


69.
private
static
class
HelloClientHandler
extends
SimpleChannelHandler
{


70.


71.
/**


72.
*
当绑定到服务端的时候触发,打印"Hello world,I'm client."


73.
*


74.
*
@alia OneCoder


75.
*
@author lihzh


76.
*/


77.
@Override


78.
public
void
channelConnected(ChannelHandlerContext
ctx,


79.
ChannelStateEvent
e) {


80.
System.out.println(
"Hello
world,I'm client."
);


81.
}


82.
}


83.
}


既然是分布式的,自然要分多个服务。Netty中,需要区分Server和Client服务。所有的Client都是绑定在Server上的,他们之间是不能通过Netty直接通信的。(自己采用的其他手段,不包括在内。)。白话一下这个通信过程,Server端开放端口,供Client连接,Client发起请求,连接到Server指定的端口,完成绑定。随后便可自由通信。其实就是普通Socket连接通信的过程。

Netty框架是基于事件机制的,简单说,就是发生什么事,就找相关处理方法。就跟着火了找119,抢劫了找110一个道理。所以,这里,我们处理的是当客户端和服务端完成连接以后的这个事件。什么时候完成的连接,Netty知道,他告诉我了,我就负责处理。这就是框架的作用。Netty,提供的事件还有很多,以后会慢慢的接触和介绍。

你应该已经可以上手了:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: