Netty实现同端口接收 TCP 和 WebSocket 连接

本文介绍了如何使用Netty实现一个服务器,该服务器在同一端口上同时支持TCP和WebSocket连接。关键在于理解WebSocket连接握手协议的GET特性,并通过Netty的Handler热插拔来区分和处理两种不同协议的连接。文中提供了启动类、协议选择类以及WebSocket消息接收处理类的实现,并提到了Websocket在线测试和接口模拟请求工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、实现原理是基于websocket的连接握手协议是以GET /开头的,利用netty对handler的热插拔实现同一端口tcp和websocket双协议共存。

实现代码如下

server启动类

package com.example.demo.im;

import com.example.demo.http.NettyWebSocketHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
import io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketServerCompressionHandler;

import java.net.InetSocketAddress;

public class NettyServer {

    public static void main(String[] args) {

        //boss 线程组用于处理连接工作
        EventLoopGroup boss = new NioEventLoopGroup();
//          work 线程组用于数据处理
        EventLoopGroup work = new NioEventLoopGroup();
        ServerBootstrap bootstrap = new ServerBootstrap();
        bootstrap.group(boss, work)
                // 指定Channel
                .channel(NioServerSocketChannel.class)
                //使用指定的端口设置套接字地址
                .localAddress(new InetSocketAddress(10008))
                //服务端可连接队列数,对应TCP/IP协议l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值