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