Netty基本组件

忘是亡心i 2022-12-28 12:57 278阅读 0赞

1 Netty是什么

  • 异步事件驱动框架,用于快速开发高性能服务端和客户端
  • 封装了JDK底层BIO和NIO模型,提供高度可用的API
  • 自带编解码器解决拆包粘包问题,用户只用关心业务逻辑
  • 精心设计的reactor线程模型支持高并发海量连接
  • 自带各种协议栈让你处理任何一种通信协议都几乎不用亲自动手

2 一个简单的socket例子

这是一个简单I/O的例子

  1. /** * Server端启动类 * @author mazhen */
  2. public class ServerBoot {
  3. private static final int PORT = 10000;
  4. public static void main(String[] args) {
  5. Server server = new Server(PORT);
  6. server.start();
  7. }
  8. }
  9. import java.io.IOException;
  10. import java.net.ServerSocket;
  11. import java.net.Socket;
  12. public class Server {
  13. private ServerSocket serverSocket;
  14. public Server(int port) {
  15. try {
  16. this.serverSocket = new ServerSocket(port);
  17. System.out.println("服务端启动成功,端口:" + port);
  18. } catch (IOException exception) {
  19. System.out.println("服务端启动失败");
  20. }
  21. }
  22. public void start() {
  23. doStart();
  24. System.out.println("无法执行到我?");
  25. }
  26. private void doStart() {
  27. while (true) {
  28. try {
  29. //serverSocket获取客户端的请求并获取客户端Socket
  30. Socket client = serverSocket.accept();
  31. new ClientHandler(client).start();
  32. } catch (IOException e) {
  33. System.out.println("服务端异常");
  34. }
  35. }
  36. }
  37. }
  38. import java.io.IOException;
  39. import java.io.InputStream;
  40. import java.net.Socket;
  41. public class ClientHandler {
  42. public static final int MAX_DATA_LEN = 1024;
  43. private final Socket socket;
  44. public ClientHandler(Socket socket) {
  45. this.socket = socket;
  46. }
  47. public void start() {
  48. System.out.println("新客户端接入");
  49. //启动一个线程,读取Socket中的输入流
  50. new Thread(this::doStart).start();
  51. }
  52. private void doStart() {
  53. try {
  54. InputStream inputStream = socket.getInputStream();
  55. while (true) {
  56. byte[] data = new byte[MAX_DATA_LEN];
  57. int len;
  58. while ((len = inputStream.read(data)) != -1) {
  59. String message = new String(data, 0, len);
  60. System.out.println("客户端传来消息: " + message);
  61. }
  62. }
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. import java.io.IOException;
  69. import java.net.Socket;
  70. /** * @author 闪电侠 */
  71. public class Client {
  72. private static final String HOST = "127.0.0.1";
  73. private static final int PORT = 10000;
  74. private static final int SLEEP_TIME = 5000;
  75. public static void main(String[] args) throws IOException {
  76. final Socket socket = new Socket(HOST, PORT);
  77. new Thread(() -> {
  78. System.out.println("客户端启动成功!");
  79. while (true) {
  80. try {
  81. String message = "hello world";
  82. System.out.println("客户端发送数据: " + message);
  83. socket.getOutputStream().write(message.getBytes());
  84. } catch (Exception e) {
  85. System.out.println("写数据出错!");
  86. }
  87. sleep();
  88. }
  89. }).start();
  90. }
  91. private static void sleep() {
  92. try {
  93. Thread.sleep(SLEEP_TIME);
  94. } catch (InterruptedException e) {
  95. e.printStackTrace();
  96. }
  97. }
  98. }

发表评论

表情:
评论列表 (有 0 条评论,278人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Netty基本组件

    1 Netty是什么 异步事件驱动框架,用于快速开发高性能服务端和客户端 封装了JDK底层BIO和NIO模型,提供高度可用的API 自带编解码器解决拆包

    相关 Netty 核心组件

    Netty 核心组件 1. 前言 本节我们主要从整体上了解 Netty 有哪些核心组件,很多同学学习完 Netty 虽然会使用,但是只知道如何自定义 Handler

    相关 netty全部核心组件

    看看netty为我们提供的核心组件 一 1. channel:netty中把一个端到端的通信定义为了通道。所谓的端包含但不限于硬件设备,文件。这是对通信的第一层抽象。通

    相关 Netty核心组件

    Netty的核心组件   Channel   回调   Future   事件   ChannelHandler   这些模块代表了不同的类型:资源(事件)、逻

    相关 netty基本组件

    今天起,我开始写netty的博客,首先从基本组件开始: 一、NioEventLoop 相当于线程,可以处理连接请求和逻辑处理 二、Channel 接收数据的管道,相当于