如何保证netty执行事件是顺序而且高效?

如何保证netty执行事件是顺序而且高效?

狼亦尘 发布于 2021-11-29 字数 657 浏览 679 回复 7

服务器现在用的Netty。如果应用需要比较高的并发处理能力,如何保证每个链接的事件顺序执行,而且高效(即时间短)。顺序是指一个链接内发的请求A,B,C,D。按顺序A,B,C,D顺序执行,而且是A执行完,执行B,B结束后执行C,C结束后执行D。而不是A,B,C,D四个请求发上来一起并行处理。因为并行的话,就会有同步问题。

我现在的处理方法是把所有的链接发上来的请求放到不同的队列中(同一个链接的请求确保在同一个队列),然后再一个个执行,这样可以保证执行事件的顺序,但是不能保证效率。因为如果链接数比较多,比如1000个链接,那么要处理的事件就会很多,多个队列处理能力就会下降,事件在队列中等待的时间就会加长。

那么,如果保证顺序执行的前提下,保证效率呢?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

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

评论(7

看透却不说透 2021-12-01 7 楼

Tcp的消息本就是有序的,netty内部本就使用了一个List队列,为什么自己还要再写个队列去处理?netty内部有线程池,不需要你再手动开启线程去处理消息的。

netty线程池的多少配置:在NioEventLoopGroup构造中有指定线程池数量和类型的

嘦怹 2021-12-01 6 楼

我现在就是这样做的,但是怎么保证效率?比如说瞬时的大量请求。那么就会有很多人的请求要等待。

水水月牙 2021-12-01 5 楼

回复
机器性能就这样了,已经不是线程多少能解决的问题,增加服务器,用负载均衡吧,没个客户端的访问都定位到同一个Server,我们是在Cookie里加了个标志。

緦唸λ蓇 2021-12-01 4 楼

好的,谢谢你

緦唸λ蓇 2021-12-01 3 楼

任务队列不要太多,例如就10个,然后分配执行任务时用 queues[ID % 10],这个 ID 可以是链接的 Hash,每个链接的 Hash 是固定的,而消息是TCP传过来也是有序的,最终保证了消息的顺序执行。

勿忘初心 2021-12-01 2 楼

这个有点太耗资源了,不过谢谢,提供一种思路

空城仅有旧梦在 2021-11-30 1 楼

不考虑资源占用的话,你的处理方式(每个用户一个队列)就可以了