Netty

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 18:52   747   0

Netty是什么?

本质:JBoss做的一个Jar包

目的:快速开发高性能、高可靠性的网络服务器和客户端程序

优点:提供异步的、事件驱动的网络应用程序框架和工具

通俗的说:一个好使的处理Socket的东东

如果没有Netty?

远古:java.net + java.io

近代:java.nio

其他:Mina,Grizzly

为什么不是Mina?

1、都是Trustin Lee的作品,Netty更晚;

3、Netty的文档更清晰,很多Mina的特性在Netty里都有;

4、Netty更新周期更短,新版本的发布比较快;

Netty的特性

设计

统一的API,适用于不同的协议(阻塞和非阻塞)

基于灵活、可扩展的事件驱动模型

高度可定制的线程模型

可靠的无连接数据Socket支持(UDP)

性能

更好的吞吐量,低延迟

更省资源

尽量减少不必要的内存拷贝

安全

完整的SSL/TLS和STARTTLS的支持

能在Applet与Android的限制环境运行良好

健壮性

不再因过快、过慢或超负载连接导致OutOfMemoryError

不再有在高速网络环境下NIO读写频率不一致的问题

易用

完善的JavaDoc,用户指南和样例

简洁简单

仅信赖于JDK1.5

[java] view plain copy
  1. /**
  2. * Netty 服务端代码
  3. *
  4. * @author lihzh
  5. * @alia OneCoder
  6. * @blog http://www.coderli.com
  7. */
  8. public class HelloServer {
  9. public static void main(String args[]) {
  10. // Server服务启动器
  11. ServerBootstrap bootstrap = new ServerBootstrap(
  12. new NioServerSocketChannelFactory(
  13. Executors.newCachedThreadPool(),
  14. Executors.newCachedThreadPool()));
  15. // 设置一个处理客户端消息和各种消息事件的类(Handler)
  16. bootstrap
  17. .setPipelineFactory(new ChannelPipelineFactory() {
  18. @Override
  19. public ChannelPipeline getPipeline()
  20. throws Exception {
  21. return Channels
  22. .pipeline(new HelloServerHandler());
  23. }
  24. });
  25. // 开放8000端口供客户端访问。
  26. bootstrap.bind(new InetSocketAddress(8000));
  27. }
  28. private static class HelloServerHandler extends
  29. SimpleChannelHandler {
  30. /**
  31. * 当有客户端绑定到服务端的时候触发,打印"Hello world, I'm server."
  32. *
  33. * @alia OneCoder
  34. * @author lihzh
  35. */
  36. @Override
  37. public void channelConnected(
  38. ChannelHandlerContext ctx,
  39. ChannelStateEvent e) {
  40. System.out.println("Hello world, I'm server.");
  41. }
  42. }
  43. }
[java] view plain copy
  1. /**
  2. * Netty 客户端代码
  3. *
  4. * @author lihzh
  5. * @alia OneCoder
  6. * @blog http://www.coderli.com
  7. */
  8. public class HelloClient {
  9. public static void main(String args[]) {
  10. // Client服务启动器
  11. ClientBootstrap bootstrap = new ClientBootstrap(
  12. new NioClientSocketChannelFactory(
  13. Executors.newCachedThreadPool(),
  14. Executors.newCachedThreadPool()));
  15. // 设置一个处理服务端消息和各种消息事件的类(Handler)
  16. bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
  17. @Override
  18. public ChannelPipeline getPipeline() throws Exception {
  19. return Channels.pipeline(new HelloClientHandler());
  20. }
  21. });
  22. // 连接到本地的8000端口的服务端
  23. bootstrap.connect(new InetSocketAddress(
  24. "127.0.0.1", 8000));
  25. }
  26. private static class HelloClientHandler extends SimpleChannelHandler {
  27. /**
  28. * 当绑定到服务端的时候触发,打印"Hello world, I'm client."
  29. *
  30. * @alia OneCoder
  31. * @author lihzh
  32. */
  33. @Override
  34. public void channelConnected(ChannelHandlerContext ctx,
  35. ChannelStateEvent e) {
  36. System.out.println("Hello world, I'm client.");
  37. }
  38. }
  39. }


优秀的设计----事件驱动



优秀的设计----线程模型



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP