假设我有一个名为“ WebSocketAdapter
”的类,用@ServerWebSocket
. 此类具有类似于聊天示例的 @OnOpen
功能 @OnClose
。@OnMessage
在我的类中,我有一个在WebSocketBroadcaster
. 在我的套接字函数中WebSocketSession
,如果需要,我可以将其保存到对象中,但实际上我正在使用广播器向所有打开的套接字进行广播。
接下来,我有一个@Controller
带有@Post
控制器功能的类。这只是将发布的数据写入println
.
这可能相关也可能不相关:我正在动态使用@Singleton
POST控制器。DefaultRouteBuilder
@Inject
最后,我将我的index.html
设置设置为静态资源,并使用一个简单的脚本来使用 websocket 将数据附加到 DOM。
所以,我可以站起来 micronaut,访问localhost
并查看从我的套接字到页面的数据流。此外,我可以发布到我的端点并在控制台中查看数据。
我的问题是,当我发布到 post 控制器时,如何让我的套接字会话广播?我如何将 websocket 作为 post 控制器的依赖注入,以便我可以将发布到服务器的消息发送到所有打开的浏览器?注意:我正在使用 Kotlin,但对任何语言的任何建议都持开放态度。
我尝试过的事情:
直接传递
WebSocketSession
到后控制器并希望它得到“豆类”尝试通过
BeanContext.run().getBean(WebSocketAdapter::class.javaClass)
并使用它的广播器或会话来访问 bean制作
@ServerWebSocket
a@Singleton
并@Inject
在会话上使用并尝试访问它试图找到 bean
@ApplicationContext
并使用它的会话使用 rx 在类之间传递数据(我熟悉 RxSwift)
我似乎收到了如下错误:Bean Context must support property resolution
文件说
WebSocketSession 默认由内存映射支持。如果添加会话模块,则可以在 HTTP 服务器和 WebSocket 服务器之间共享会话。
我已将会话模块添加到我的 .gradle 中,但是,我究竟如何在 micronaut 之间ws://
以及http://
与 micronaut 之间共享我的会话?