文章目录
WebSocket - Netty服务端/客户端构建
文章目录 |
---|
在线websocket测试-online tool-postjson (coolaf.com) |
WebSocket协议深入探究 - 云+社区 - 腾讯云 (tencent.com) |
/ |
一、概要
初步总结几句话
- 是单个TCP连接上的全双工通信协议
- 服务端与客户端之间
仅需一次握手
,即可创建持久性连接进行双向数据传输
WebSocket和Socket的区别
- Socket:客户端主动请求,服务器被动应答,单向数据传输;
- WebSocket:全双工模式,仅需一次握手;
实际上,WebSocket使用的场景在于实时要求高的场景。
二、基于Netty构建WebSocket服务端
2.1 入门案例
NettyServer基本配置
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
/**
* @author 李家民
*/
public class NettyServer {
public void ServerStart() throws InterruptedException {
// 连接请求处理
EventLoopGroup bossGroup = new NioEventLoopGroup(3);
// IO请求处理
EventLoopGroup workerGroup = new NioEventLoopGroup(5);
// 基本配置
ServerBootstrap serverBootstrap =
new ServerBootstrap().group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
// 处理器管道配置
serverBootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
System.out.println("此时客户端进来了:" + "客户 SocketChannel hashcode=" + ch.hashCode());
ChannelPipeline pipeline =