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);
}
}

最新文章

  1. 使用DFA做文本编辑器的自动提示
  2. 【迁移】—Entity Framework实例详解 转
  3. python smtplib email
  4. switch
  5. TeraData金融数据模型
  6. uml定义的使用的关系
  7. CUBRID学习笔记 41 sql语法之select
  8. 在.net中序列化读写xml方法的总结
  9. byte数组转16进制 输出到文件
  10. NodeJs之服务搭建与数据库连接
  11. 项目Alpha冲刺(团队)-第三天冲刺
  12. 洛谷P2320鬼谷子的钱袋.
  13. kubernetes 基础
  14. Android 时间与日期操作类
  15. ActiveMQ Advisory Message
  16. <kafka><应用场景><Kafka VS Flume>
  17. Java设计模式(8)——策略模式
  18. SDN2017 第五次实验作业
  19. eclipse下载与安装并测试
  20. 图形 - bootStrap4常用CSS笔记

热门文章

  1. elasticsearch系列(三)库表理解
  2. Maven 一段时间知识小结2
  3. 用cookies判断用户首次登录
  4. 修改input的placeholder颜色
  5. SPOJ-394-ACODE - Alphacode / dp
  6. tail命令 | head命令
  7. 【MySQL】CSV 文件导入MySQL
  8. 在线修改Schema
  9. ios 不兼容 报错NaN
  10. Conky配置文件