首页 > 其他分享 >netty同时支持tcp和websocket

netty同时支持tcp和websocket

时间:2023-10-28 18:02:40浏览次数:25  
标签:netty pipeline websocket addLast shutdownGracefully tcp workerGroup new

最近接手了别人的netty框架实现的im的一个项目,基于tcp实现通信,但是领导要求做一个网页版的聊天,接入到目前的系统,由于第一次接触这种项目,百度一圈大部分都是通过websocket实现通信的方式,最后通过chatgpt发现确实可以同时支持tcp和websocket,现在把方式放上

Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对TCP、UDP和多种协议的支持,包括WebSocket。

 以下是一个简单的Netty服务器示例,它同时支持TCP和WebSocket:

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap b = new ServerBootstrap();
    b.group(bossGroup, workerGroup)
     .channel(NioServerSocketChannel.class)
     .childHandler(new ChannelInitializer<SocketChannel>() {
         @Override
         public void initChannel(SocketChannel ch) throws Exception {
             ChannelPipeline pipeline = ch.pipeline();
             pipeline.addLast(new HttpServerCodec());
             pipeline.addLast(new HttpObjectAggregator(65536));
             pipeline.addLast(new WebSocketServerProtocolHandler("/websocket"));
             pipeline.addLast(new MyWebSocketHandler());
         }
     });

    ChannelFuture f = b.bind(8080).sync();
    f.channel().closeFuture().sync();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}

} finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); }

在这个示例中,我们首先创建了两个EventLoopGroup,一个用于接受连接,另一个用于处理已接受的连接。然后我们创建了一个ServerBootstrap,并配置它以使用我们的事件循环组和NIO传输。我们添加了一个ChannelInitializer,它将在一个新的连接被接受时被调用,以初始化该连接的通道管道。在这个初始化器中,我们添加了几个处理器,包括一个HttpServerCodec,一个HttpObjectAggregator,一个WebSocketServerProtocolHandler,以及我们自定义的MyWebSocketHandler。最后,我们绑定服务器到指定的端口,并等待它关闭。

netty同时支持tcp和websocket_netty

标签:netty,pipeline,websocket,addLast,shutdownGracefully,tcp,workerGroup,new
From: https://blog.51cto.com/u_16232994/8072463

相关文章

  • 03. TCP的3次握手4次挥手
    一、三次握手  TCP是稳定的传输方式,在接收、发送之前,双发需要建立一个虚拟的通道,这个过程称为3次握手。3次握手的流程如下:客户端调用connect()时发送一个带有标记的数据包,我们把建立连接时的第1次数据叫做SYN,其中由1个数字;服务器接收到这个SYN数据包,提取出数......
  • .net5 websocket 客户端
    stringurl="http://127.0.0.1:2141";HubConnection_conn=newHubConnection(url,true);IHubProxy_proxy=_conn.CreateHubProxy($"/MyHub");_conn.Start();//定义客户端的方法sendMessage()(有两个string类型的参数,当服务端调用sendMessage,需要传入2个string类型参......
  • Protocol - Socket v.s. WebSocket
    总结什么是socket?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。  什么是WebSocket?WebSocket是实现了浏览器与服务器的全双工通信协议,一个模拟Socket的应用层......
  • API - 几种API接口模式 - RESTful、WebSocket、GraphQL、gRPC、Webhook
    总结TODO.....当思考使用哪种API接口时,你将会面临一个重要的决策。RESTful、GraphQL、gRPC、WebSocket和Webhook是当前流行的几种API接口模式。在本文中,我们将介绍这些接口的特点、用途和比较,帮助你选择最适合你应用程序需求的接口。引言随着现代应用程序的复杂性和用户期望的......
  • 用springBoot、netty写TCP客户端/服务端,并用TCP工具测试
    1.启动客户端和连接服务端packagecom.pkx.cloud.test.netty;importio.netty.bootstrap.Bootstrap;importio.netty.channel.*;importio.netty.channel.nio.NioEventLoopGroup;importio.netty.channel.socket.SocketChannel;importio.netty.channel.socket.nio.NioSock......
  • TCP/IP协议族面面观
    TCP/IP协议族介绍及在C#中的使用什么是TCP/IP协议族?TCP/IP协议族是互联网最基本的网络协议族,它定义了互联网上设备之间进行通信的规范。TCP/IP协议族由多个协议组成,每个协议都有不同的功能和用途,下面我们将介绍其中一些常用的协议。TCP/IP协议族中的常用协议1.IP协议Interne......
  • CentOS7系统放行TCP/UDP端口教程
    在使用CentOS7操作系统时,您需要放行某些端口,以便应用程序能够正常运行。下面是如何放行TCP/UDP端口的步骤。步骤1:SSH连接服务器使用SSH方式连接服务器,如果您不知道如何SSH连接服务器,可以查看该教程:SSH远程连接Linux服务器教程步骤2:确定要放行的端口在放行端口之前,您需要确定要......
  • 传输层协议 TCP
    TCP(TransportControlProtocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工,是一个连接导向的协议。TCP提供的是Host-To-Host传输,一台主机通过TCP发送数据给另一台主机。 TCP协议往上是应用到应用(Application-To-Application)的协议。什么是应用到应用......
  • TCP Socket性能优化秘籍
    一、引言1.1、TCPSocket在网络通信中的重要性TCPSocket在网络通信中的重要性体现在其提供了可靠的数据传输、连接性、多路复用等特性,是实现各种网络应用的基础,同时具有广泛的兼容性。它的存在使得网络通信更加可靠、高效和方便。其重要性如下:可靠性:TCP(传输控制协议)是一种可......
  • EPOLLOUT只是表示tcp stream是可写入的?
    tcp_poll方法https://elixir.bootlin.com/linux/latest/source/net/ipv4/tcp.c#L553......