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); } }
相关文章推荐
- 实验8 SQLite数据库操作
- Java小数点位数保留问题
- 最长公共子串问题
- Android RGB颜色查询对照表
- SPOJ GSS1 Can you answer these queries I
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
- eclipse下将solr发布为web项目
- 数据库模型设计——主键的设计
- javascript实例教程:事件委托讲解
- Ubuntu14.04实现简单日志文件服务器
- IP地址转Byte
- JavaScript不能做什么
- 简单实现左右两个listview联动,点击左边切换右边
- 基于微服务架构的云平台总体设计
- 轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features & Match)
- Java 数据类型与jni数据类型对应关系
- 数据移位(C案例)
- Android进程间通信(IPC)之Messenger
- Codeforces 350 Div2 E Correct Bracket Sequence Editor(list模拟)
- hdu1754 I Hate it