NGINX社区官方微服务训练营,深入了解K8s网络,线上课程+专家答疑,立即加入>>>
protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); //解码用 p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder()); //构造函数传递要解码成的类型 这里如果再有一个LocalDates的话应该怎么处理 p.addLast("protobufDecoder", new ProtobufDecoder(LocalTimeProtocol.LocalTimes.getDefaultInstance())); //编码用 p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender()); p.addLast("protobufEncoder", new ProtobufEncoder()); //业务逻辑用 这里如果再有一个LocalDateClientHandler的话应该怎么处理 p.addLast("handler", new LocalTimeClientHandler()); }
希望给出的方案不是
if (arg1 instanceof Localtime){} else if (arg1 instanceof LocalDate){} . . .
因为实体太多!目前的想法时根据接收过来的arg1定义一个ID,根据ID调用相应的ProtobufDecoder;下面的Handler也一样。但是由于刚接触Netty不熟,所以特来求助。
查找方案中有看到一遍相似的文章:http://www.cnblogs.com/Solstice/archive/2011/04/03/2004458.html想法可能不成熟,希望各位踢教!
麻烦各位最好给出Demo或者有类似实现的开源项目地址的,多谢!
参考官方的例子:PortUnificationServerHandler
简单的说就是在每个包的第一个字符写一个特殊的char,通过这个字符来动态加载不同的handler,这样就可以在一个端口实现多个协议的解析。不过本人不建议这么做。
喜欢 点个赞 http://www.oschina.net/p/gameframe
二楼的项目Maven构建了半天失败了!
大概是问题太简单了,大家都不屑回答!求指点!
可能我把问题想复杂了
这里第六行的处理我是想如果要在解码消息时选择相应的编码,就要继承重写一个
第11行中的Handler我也是同样的想法?
让大家见笑了,麻烦指教下。纠结了一周多了。谢谢!
多协议怎么处理?有案例么?谢谢!!!
protobuf 的oneof用过没? 消息类型里面加个type字段,标识不同类型的子类型消息
老哥 时隔6年 你怎么解决的呢