Netty (5)-ChannelPipeline

每个连接channel都会创建一个ChannelPipeline,它将多个ChannelHandler组装起来,当收发消息时,按一定顺序和规则将消息传播给各个ChannelHandler进行处理。

入站处理和出站处理

ChannelHandler分入站(ChannelInboundHandler)和出站(ChannelOutboundHandler),收到消息做入站处理,发出消息做出站处理。假如在ChannelPipeline中按顺序放入5个ChannelHandler,第1、3、5是入站,收到消息时按顺序触发。第2、4是出站。发出消息时会按逆向顺序触发。

出站是按逆向顺序,假如在入站3的时候就结束入站处理,并且发出消息触发出站,按逆向出站只能触发出站2,而不会触发4和5。只有在入站5发出消息触发出站,才会先后触发出站4和2。

ChannelPipeline操作

ChannelPipeline内的ChannelHandler数量或顺序都可以动态进行调整修改

			ServerBootstrap b = new ServerBootstrap(); 
			b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) 
					.childHandler(new ChannelInitializer<SocketChannel>() {
						@Override
						public void initChannel(SocketChannel ch) throws Exception {
							ch.pipeline().addLast("handler1",new Handler1());//1添加到结尾
							ch.pipeline().addLast("handler2",new Handler2());//2添加到结尾
							ch.pipeline().addfirst("handler3",new Handler3());//3添加到开头
							ch.pipeline().remove("handler1");//移除1
							ch.pipeline().replace("handler2","handler4",new Handler4());//4替代2
							ch.pipeline().addBefore("handler3","handler5",new Handler5());//在3前面添加5
							ch.pipeline().addAfter("handler3","handler6",new Handler6());//在3后面添加6
							

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Netty是一个基于Java的异步事件驱动的网络应用框架,它提供了一系列易于使用的API,用于创建高性能、可扩展的网络服务器和客户端应用程序。 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端先发起请求。在Java中,Netty提供了对WebSocket的支持,可以通过Netty来实现WebSocket服务器和客户端。 当使用Netty实现WebSocket时,Sec-WebSocket-Protocol是WebSocket握手过程中的一个HTTP头部字段,它用于指定客户端和服务器之间通信所使用的子协议。子协议是在WebSocket连接建立后,用于在双方之间传输数据的协议。 在Netty中,可以通过设置`WebSocketServerProtocolHandler`的`subprotocols`属性来指定支持的子协议。例如,可以使用以下代码来设置子协议为"chat": ```java ChannelPipeline pipeline = channel.pipeline(); pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); pipeline.addLast(new WebSocketServerCompressionHandler()); pipeline.addLast(new WebSocketServerProtocolHandler("/websocket", "chat")); pipeline.addLast(new MyWebSocketHandler()); ``` 在上面的代码中,`WebSocketServerProtocolHandler`的第二个参数就是Sec-WebSocket-Protocol的值,这里设置为"chat"。这样,当客户端与服务器进行握手时,可以指定"chat"作为子协议,在连接建立后双方就可以使用该子协议来进行通信。 希望这个回答对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值