您的位置:首页 > 其它

Netty系列之一开始使用

2016-05-12 23:38 169 查看
Netty是用来做什么的呢,我的理解是它是一个网络开发框架,利用它能很快速方便的开发出高性能的服务端和客户端。刚开始学习java的时候你一定接触过怎么利用socket去实现服务端和客户端,后来java出了NIO这一大利器极大提供了网络程序的性能,但是NIO是基于事件驱动的模型,理解起来比常用的套接字编程要难一点,但是无论是利用NIO还是原始的socket编程从0开始编写一个服务端或是客户端实在是太困难了。Netty就是帮助你去解决这样的问题的,废话不多说先简单介绍一个例子,我们要写一个服务端绑定端口号后,等待客户端的连接,客户端连接后打印一句欢迎语句,然后客户端输入什么,服务端打印出来,并且返回给客户端输出,利用netty实现如下

public class Server {

private ServerBootstrap serverBootstrap;

private int port;

public Server(int port) {
this.port = port;
serverBootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline channelPipeline = Channels.pipeline();
channelPipeline.addLast("decoder", new StringDecoder());
channelPipeline.addLast("encoder", new StringEncoder());
channelPipeline.addLast("serverHandler", new ServerHandler());
return channelPipeline;
}
});
serverBootstrap.bind(new InetSocketAddress(this.port));
}

private class ServerHandler extends SimpleChannelUpstreamHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
if(e.getMessage() instanceof String) {
String message = (String) e.getMessage();
System.out.println("Client Send:" + message);
e.getChannel().write("Server receive:" + message);
}
}

@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
System.out.println("A client connected to this server");
System.out.println("Client:" + e.getChannel().getRemoteAddress());
e.getChannel().write("******************************\r\n");
e.getChannel().write("Welcome to connect this server\r\n");
e.getChannel().write("******************************\r\n");
}
}

public static void main(String args[]) {
new Server(9999);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: