Допустим, у меня есть класс с именем "WebSocketAdapter
", помеченный @ServerWebSocket
.Этот класс имеет функции @OnOpen
, @OnClose
, @OnMessage
, подобные примеру чата.
Внутри моего класса у меня есть конструктор, который передается в WebSocketBroadcaster
.Внутри моих функций сокетов у меня есть WebSocketSession
, который я могу сохранить на объекте, если захочу, но на самом деле я использую вещатель для вещания на все открытые сокеты.
Далее у меня есть @Controller
класс с @Post
функцией контроллера.Это просто записывает опубликованные данные с println
.
. Это может иметь или не иметь значение: я использую @Singleton
с DefaultRouteBuilder
до @Inject
контроллера POST динамически.
Наконец, мой index.html
настроен как статический ресурс с простым скриптом, созданным для использования веб-сокетов и добавления данных в DOM.
Итак, я могу встать с микронавтом, посетить localhost
и посмотреть данныепоток из моего сокета на страницу.Кроме того, я могу отправлять сообщения на конечную точку и просматривать данные в консоли.
Мой вопрос заключается в том, как сделать так, чтобы сеанс моего сокета транслировался, когда я отправляю сообщения на пост-контроллер?Как именно я добавляю websocket как зависимость от пост-контроллера, чтобы я мог отправить сообщение, отправленное на сервер, во все открытые браузеры?Примечание: я использую Kotlin, но открыт для любых предложений на любом языке.
Вещи, которые я пробовал:
Передача WebSocketSession
непосредственно в пост-контроллер и надеюсь, что этополучает 'beaned' в
Попытка получить доступ к bean через BeanContext.run().getBean(WebSocketAdapter::class.javaClass)
и использовать его вещатель или сеанс
Создание @ServerWebSocket
a@Singleton
и использование @Inject
в сеансе и попытка доступа к нему
Попытка найти компонент с помощью @ApplicationContext
и использовать его сеанс
Использование rx для передачи данных между классами (я знаком с RxSwift)
Кажется, я получаю сообщение об ошибке вроде: Bean Context must support property resolution
В документации говорится
WebSocketSession по умолчанию поддерживается картой в памяти.Если вы добавите модуль сеанса, вы, однако, сможете совместно использовать сеансы между сервером HTTP и сервером WebSocket.
Однако я добавил модуль сеанса в мой .gradle, как именно я делюсь своими сеансами междуws://
и http://
с микронавтом?