Mina Filter 丢失是为什么?

发布于 2021-11-16 16:23:55 字数 1588 浏览 680 评论 2

最近项目中需要用到socket通信 去处理大并发设备请求所以选择了使用mina框架来处理socket请求。

服务端socket 代码如下:


IoAcceptor acceptor = new NioSocketAcceptor();

acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));
acceptor.getFilterChain().addLast("exector",new ExecutorFilter(Executors.newCachedThreadPool()));
// add other company device API CODEC protocol
acceptor.getFilterChain().addLast("prune", new PruneFilter());
acceptor.getFilterChain().addLast("auth", new AuthFilter());
acceptor.getFilterChain().addLast("body", new BodyFilter());


acceptor.getSessionConfig().setReadBufferSize(ConfigSet.READ_BUFFERED_SIZE);
// read-write channel 10 second no-OPS into the idle state
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, ConfigSet.IDLE_TIME);
acceptor.setHandler(new DataHandler());

acceptor.setDefaultLocalAddress(new InetSocketAddress(ConfigSet.PORT));

try {
  acceptor.bind();
  log.info("socket server start successfull, port: " + ConfigSet.PORT);
} catch (IOException e) {
  log.error("socket bind failed.", e);
}



通过mina的filter机制来处理协议定义的过滤,然后把处理完的结果丢给业务层去处理(DataHandler)

filter部门,先通过mina本身提供过滤器去处理,然后再依次交给PruneFilter、AuthFilter、BodyFilter三个过滤器来对协议定义进行审核,审核通过才能交给handler去处理,否则直接终止。

但是自定义filter部分不知道 怎么弄的,并不是链式结构去处理,我本地开启100个socket线程并发请求服务端,服务端有时候会跳过自定义filter,跳过任意一个或多个filter。并不经过filter  数据就直接到了handler层。 请问哈这个是什么问题导致的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋你朝朝暮暮 2021-11-22 13:40:23

是不是你加的过滤器太多了?你好好测试一下!

沦落红尘 2021-11-22 12:14:56

是不是你加的过滤器太多了?你好好测试一下!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文