Кажется, что Undertow отправляет поврежденные сообщения при включении с помощью permessage-deflate.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Кажется, что Undertow отправляет поврежденные сообщения при включении с помощью permessage-deflate.

Сообщение Anonymous »

Я использую undertow для запуска сервера веб-сокетов, который отправляет позиции курсора. Я использую Undertow 2.3.5.Final на openjdk 11.0.22 16 января 2024.
Проблема: если я открою две вкладки , в конечном итоге я получаю поврежденное сообщение.
Вот как выглядит успешное сообщение:

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

{"op":"refresh-presence","room-id":"123","data":{"5c494daf-3c68-4ef6-b649-69177cc10105":{"peer-id":"5c494daf-3c68-4ef6-b649-69177cc10105","user":null,"data":{}},"b4eb6d8a-562a-4b8c-8e44-ecd43cba3621":{"peer-id":"b4eb6d8a-562a-4b8c-8e44-ecd43cba3621","user":null,"data":{}},"88f03150-696d-4e09-afbd-1381a2fa2f7e":{"peer-id":"88f03150-696d-4e09-afbd-1381a2fa2f7e","user":null,"data":{"cursors-space-default--main-123":{"x":723,"y":345,"xPercent":56.484375,"yPercent":52.43161094224924}}}}}
А вот и провал:

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

ors-space-default--main-123":{"x":562,"y":12,"xPercent":43.9ab521,"r56nt":1b3273a68bf-fefe7d735"}
^ Похоже, часть попрошайничества «отрезана». xPercent тоже выглядит странно: 43.9ab521, как будто некоторые uuid испортили значения.
И еще пример:
Это успешное сообщение:

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

{"op":"set-presence-ok","room-id":"123","client-event-id":"9093a7cc-96ea-42e5-943e-e7c7962bbfcc"}
И это провал

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

{"op":"set-presence-ok","room-id":"123","client-event-id":"6186021","u44-45ser"265-211b8cu44315"}
Похоже, что uuid здесь обрезан
Настройка
Вот как я настраиваю соединение через веб-сокет:

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

(defn ws-request [^HttpServerExchange exchange ^IPersistentMap headers ^WebSocketConnectionCallback callback]
(let [handler (->  (WebSocketProtocolHandshakeHandler. callback)
(.addExtension (PerMessageDeflateHandshake.
true ; client?
6    ; deflaterLevel: is a number from 0 (no compression) to 9 (maximum compression)
)))]
(when headers
(set-headers (.getResponseHeaders exchange) headers))
(.handleRequest handler exchange)))

А вот как я отправляю сообщения:

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

(defn send-json!
"Serializes `obj` to json, and sends over a websocket."
[obj ws-conn]
(let [obj-json (->json obj)
p (promise)
_ (WebSockets/sendText
^String obj-json
^WebSocketChannel ws-conn
(proxy [WebSocketCallback] []
(complete [ws-conn context]
(deliver p nil))
(onError [ws-conn context throwable]
(deliver p throwable))))
ret @p]
(when (instance? Throwable ret)
(throw ret))))
Потенциальный виновник: PerMessageDeflateHandshake
Если я удалю расширение PerMessageDeflateHandshake, я больше не смогу воспроизвести поврежденные сообщения.
Я не уверен, как лучше всего решить эту проблему.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ge-deflate
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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