使接收到的Websocket事件进行异步处理的最佳方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使接收到的Websocket事件进行异步处理的最佳方法相关的知识,希望对你有一定的参考价值。
我有一个Java应用程序使用JDA从Discord的websocket接收事件,我的目标是使这些事件入队(我一直在使用LinkedBlockingQueues,但是如果有一个更好的工具,建议非常欢迎),可以在多个对象实例上进行处理(消费者)异步,每个队列都有自己的队列。
我尝试的第一件事是使用以下方法克隆阻止队列
BlockingQueue<T> original = new LinkedBlockingQueue<T>();
BlockingQueue<T> clone = new LinkedBlockingQueue<T>(original);
但是这只会复制当时存在于队列中的事件,实际上也不会将生产者与克隆绑定在一起,因此它不起作用。
我还尝试为每个使用者分配一个侦听器,但这似乎在使用jda的运行时效率较低。
我一直采用的方法是将所有事件馈入主队列并启动一个线程,该线程会将所有这些事件传递到分布在所有实例中的并行队列中,但这似乎效率很低而且很不干净。
解决此问题的最佳,最干净,最有效的方法是什么?
答案
为什么不共享队列而是在多个线程之间克隆队列?以上是关于使接收到的Websocket事件进行异步处理的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章