Ktor отражение при создании пользовательского сеанса WebSocket не обновляет параметры конструктора - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над веб-приложением, написанным с использованием бэкэнда Kotlin и React, которое использует Ktor для настройки веб-сервера. В настоящее время я пытаюсь добавить функциональность, для которой требуется соединение WebSocket, и поддерживать состояние в течение сеанса WebSocket, используя пользовательскую модель сеанса из примера приложения чата Ktor здесь: https://github.com/ktorio/ktor-samples/tree/master/app/chat/src.

Однако у меня возникает проблема с отражением, которое Ktor делает для создания этих сессий.

Пользовательский сеанс определяется следующим образом:

data class THavalonUserSession(val id: String,
 var name: String, var socket: DefaultWebSocketSession?)

И инициализируется в следующем блоке:

      intercept(ApplicationCallPipeline.Features) {
          if (call.sessions.get<THavalonUserSession>() == null) {
              call.sessions.set(THavalonUserSession(generateNonce(), "", null))
            }
        }

Когда я запускаю приложение в Chrome, либо со встроенным React, либо в режиме разработки React, я получаю следующую ошибку на стороне сервера:

java.lang.IllegalArgumentException: Couldn't instantiate type class main.THavalonUserSession for parameters [id, name]

Когда я запускаю его в Firefox, он работает, пока я не изменю имя параметра сокета с сокета на mySocket, после чего он выдаст ошибку:

java.lang.IllegalArgumentException: Couldn't instantiate type class main.THavalonUserSession for parameters [id, name, socket]

Единственное, о чем я могу думать, это то, что он как-то кэширует имена классов в браузере, но для меня это не имеет смысла.

1 Ответ

0 голосов
/ 20 июля 2019

Оказывается, Ktor хранит данные отражений в локальном хранилище.Зачем?Я понятия не имею.Очистите данные браузера, чтобы решить эту проблему.

...