Cometd через веб-сокет: «неизвестный транспорт Байе» с Jetty 12.0.8JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Cometd через веб-сокет: «неизвестный транспорт Байе» с Jetty 12.0.8

Сообщение Anonymous »

Я пытаюсь подключиться к серверу Cometd через клиент WebSocket в своем приложении.
Ниже приведены зависимости, которые я добавил в pom.xml.

Код: Выделить всё





org.cometd.java
cometd-java-client-common
8.0.2



org.cometd.java
cometd-java-client-websocket-jetty
8.0.2




org.cometd.java
cometd-java-client-http-common
8.0.2



org.cometd.java
cometd-java-client-http-jetty
8.0.2







org.cometd.java
cometd-java-server-common
8.0.2



org.cometd.java
cometd-java-server-http-jakarta
8.0.2



org.cometd.java
cometd-java-server-http-jetty
8.0.2



org.cometd.java
cometd-java-annotation-server
8.0.2



org.cometd.java
cometd-java-annotation-server-jakarta
8.0.2



org.cometd.java
cometd-java-server-websocket-jakarta
8.0.2







org.cometd.java
cometd-java-common
8.0.2




Я использую Jetty версии 12.0.8
Приложение создано успешно, но когда я запускаю приложение, оно завершается с ошибкой 400 и СООБЩЕНИЕ: Неизвестный транспорт Байе. Допускаю ли я какую-либо ошибку в зависимостях, которая приводит к ошибке? Прошу вас дать предложение.
Я пробовал отлаживать приложение.
Элемент управления переходит к поиску метода AbstactHttpTransport который является частью Comet-java-server-common-8.0.2.jar.
Транспорты идут как
  • WebSocket
  • Длинный опрос
  • Опрос обратного вызова
Метод find класса AbstractHttpTransport возвращает значение null, из-за чего возникает ошибка Неизвестный транспорт Байе.

Код: Выделить всё

public static AbstractHttpTransport find(BayeuxServer bayeuxServer, CometDRequest request) {
Iterator var2 = bayeuxServer.getAllowedTransports().iterator();
while(var2.hasNext()) {
String transportName = (String)var2.next();
ServerTransport serverTransport = bayeuxServer.getTransport(transportName);
if (serverTransport instanceof AbstractHttpTransport transport)
{
if (transport.accept(request)) {
return transport;
}
}
}
return null;
}

Код: Выделить всё

bayeuxServer.getAllowedTransports()
возвращает 3
  • веб-сокет,
  • длинный опрос
    3 обратный вызов .

Код: Выделить всё

bayeuxServer.getTransport("websocket")
возвращает WebSocketTransport@40ebb56[websocket]

Код: Выделить всё

bayeuxServer.getTransport("long-polling")
возвращает JSONHttpTransport@116efe65[длинный опрос]

Код: Выделить всё

bayeuxServer.getTransport("callback-polling")
возвращает JSONPHttpTransport@2d97344c[callback-polling]
Для транспорта Websocket он не попадает в блок if ниже

Код: Выделить всё

if (serverTransport instanceof AbstractHttpTransport transport) {
if (transport.accept(request)) {
return transport;
}
}
потому что WebSocketTransport является экземпляром AbstractWebSocketTransport, но не AbstractHttpTransport.
Поэтому нет никакого способа он может войти в блок if, поэтому метод Accept не будет выполнен.
При длинном опросе он попадает в первый if блокируется, поскольку JSONHttpTransport является экземпляром AbstractHttpTransport, но метод Accept возвращает false, поскольку в нашем случае метод запроса — GET, а если метод запроса не POST, то метод Accept > метод возвращает false.
То же самое и с JSONPHttpTransport. Можете ли вы предложить мне решение этой проблемы?
Но как заставить этот метод find возвращать правильный BayeuxTransport? Пожалуйста, предложите внести какие-либо изменения в pom.xml

Подробнее здесь: https://stackoverflow.com/questions/786 ... tty-12-0-8
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»