使接收到的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事件进行异步处理的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Android 一个异步SocketHelper

在 Swift 中使用 DispatchQueue 进行同步处理

libcurl 配合epoll 的异步并行server原理

JavaScript进行WebSocket字节流通讯示例

如何使事件处理程序异步运行?

为啥接收到的 websocket 数据作为缓冲区出来?