概述
本文通过一个简单的 HelloWorld demo 来介绍 Netty 的基本使用,其中包括了服务器端和客户端的启动代码,客户端向服务器端发送文本消息。
maven 依赖
1 | <dependency> |
关键点
- 服务器端在启动的时候开放一个端口:19080
- 客户端在启动的时候通过 ip 和 端口连上服务器端
- 客户端和服务器端都通过 Channel 对象向彼此发送数据
- 服务器和客户端都通过继承 ChannelInboundHandlerAdapter 类实现对消息的读取和回写等操作
- 服务器和客户端都通过 StringDecoder 和 StringEncoder 实现对消息的解码和转码操作
- 服务器和客户端启动的时候都会阻塞当前线程,因此需要在一个单独的线程中进行启动
消息发送的例子
- 本例是一个 spring boot web 项目,项目占用了 8080 端口
- 服务器端在启动的时候开放 19080 端口(注意不要和 web 端口冲突了)
- 客户端在启动的时候连上服务器端
- 通过 web api 向客户端发送数据,客户端再通过 Channel 对象向服务器端发送数据
- 服务器接收到客户端数据后也通过 Channel 对象向客户端发送数据
server 服务器端
- 通过
@PostConstruct
注解的方法进行启动,具体如下
1 | package com.ckjava.test.server; |
- 服务器端 HelloWorldServerHandler 如下
1 | package com.ckjava.test.server; |
client 客户端
- 通过
@PostConstruct
注解的方法进行启动,具体如下
1 | package com.ckjava.test.client; |
- 客户端 HelloWorldClientHandler 实现如下
1 | package com.ckjava.test.client; |
web api 数据发送入口
- 这里只是通过
1 | package com.ckjava.test.web; |
测试
- 执行如下请求
1 | curl -X GET "http://localhost:8080/nettyClient?data=%E4%BD%A0%E5%A5%BD%20ckjava" -H "accept: application/json;charset=utf-8" |
- 输出如下
1 | 22:36:00.178 [nioEventLoopGroup-4-1] INFO c.c.t.server.HelloWorldServerHandler - 服务器端读取到从客户端:/127.0.0.1:9196 发送过来的数据:你好 ckjava |