博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
netty
阅读量:5940 次
发布时间:2019-06-19

本文共 1293 字,大约阅读时间需要 4 分钟。

这样一个pipeline:

ChannelPipeline} p = ...; p.addLast("1", new InboundHandlerA()); p.addLast("2", new InboundHandlerB()); p.addLast("3", new OutboundHandlerA()); p.addLast("4", new OutboundHandlerB()); p.addLast("5", new InboundOutboundHandlerX());

  在上例中,inbound开头的handler意味着它是一个inbound handler。outbound开头的handler意味着它是一个outbound handler。上例的配置中当一个事件进入inbound时handler的顺序是1,2,3,4,5;当一个事件进入outbound时,handler的顺序是5,4,3,2,1.在这个最高准则下,ChannelPipeline跳过特定handler的处理来缩短stack的深度:

  3,4没有实现ChannelInboundHandler,因而一个inbound事件的处理顺序是1,2,5.

  1,2没有实现ChannelOutBoundhandler,因而一个outbound事件的处理顺序是5,4,3

  若5同时实现了ChannelInboundHandler和channelOutBoundHandler,一个inbound和一个outbound事件的执行顺序分别是125和543.

 

///

netty的项目中使用protobuf,巧妙定义proto完成不同消息的编码和解码处理

在基于netty的项目中使用protobuf,需要处理不同的消息,因此需要不同的编码和解码方式(如下)
p.addLast("protobufDecoder", new ProtobufDecoder(Communication.TRequest.getDefaultInstance()));p.addLast("protobufDecoder", new ProtobufDecoder(Communication.TResponse.getDefaultInstance()));

 但netty中每个管道仅能注册一个解码和编码的方式,经过研究,想到把这些不同的消息封装成一个消息组,在不同的处理逻辑中再get相应的消息即可,而管道注册那边只需要注册一个消息格式:

p.addLast("protobufDecoder", new ProtobufDecoder(Communication.ProtocolMessage.getDefaultInstance()));

 

proto文件://封装Request和Response消息,这样netty可以统一编码和解码message ProtocolMessage{	optional TRequest tRequest=1;	optional TResponse tResponse=2;}

 

转载地址:http://zuqtx.baihongyu.com/

你可能感兴趣的文章
List<T> 循环修改其中的数据
查看>>
什么是REST?以及RESTful的实现之二
查看>>
mysql事务介绍
查看>>
Android抽象布局——include、merge 、ViewStub
查看>>
xx学OD -- 消息断点 RUN跟踪(下)
查看>>
jquery全选/取消全选(反选)/单选操作
查看>>
dataTables-使用详细说明整理
查看>>
yum下载软件包
查看>>
我的友情链接
查看>>
Linux chkconfig命令详解
查看>>
node.js Linux下安装
查看>>
linux编程综合案例
查看>>
【转】VC++ MFC文件的移动复制删除更名遍历操作
查看>>
win7-64系统安装oracle 11G客户端
查看>>
python的__new__方法和__del__方法
查看>>
创建私有CA及私有CA的使用
查看>>
我的友情链接
查看>>
【AR】开始使用Vuforia开发iOS(2)
查看>>
Eclipse中使用Git
查看>>
关于js中"window.location.href"、"location.href" 等如何跳转
查看>>