2016-03-05 3 views
2

У меня есть сервер websocket на основе Jetty (v 9.3.6). Иногда я получаю скремблированное текстовое сообщение, так как оно объединено из 2 отдельных текстовых сообщений. Все сообщения, отправленные с клиента на сервер, и наоборот, находятся в формате JSON.Почему я получаю плохое/скремблированное/искаженное текстовое сообщение на websocket?

Например, у меня есть это 2 отделенных сообщения:

{"a":"b","c":"d"} 

и

{"e":"f","g":"h"} 

Иногда (не всегда) я получаю что-то вроде этого:

"b","c":"d"} 

или

"b""g":"h"},"c":"d"} 

Это либо неполное сообщение, либо комбинация из двух разных неполных сообщений.

Я заметил об этой ошибке, когда парсер JSON начал бросать ошибки синтаксического анализа строк.

ПРИМЕЧАНИЕ. Я попытался, но не смог имитировать это на локальном хосте. На производственном сервере, где у меня около 600-1k подключенных клиентов и около 100k + сообщений, отправленных в день, эти ошибки отображаются на 0,5-1% от общего числа отправленных сообщений.

Примечание 2: клиенты являются веб-браузеры (Chrome, Firefox и т.д.)

ответ

2

Убедитесь, что у вас есть permessage-deflate активный.

Если вы это сделаете, то вы споткнулся на ошибки 485469 ("расширение permessage-выкачивает вызывает ошибку протокола в Firefox/Chrome")

Либо отключить permessage-deflate или обновить Jetty 9.3.7.v20160115

+0

Hello @Joakim Erdfelt. Я думаю, что у меня есть разрешающая способность с дефлятом. Я обновился до 9.3.7, но теперь некоторые сообщения не отправляются клиентом (Chrome). Если я понижаюсь до 9.3.6, он работает. Сервер отправляет этот заголовок при подключении: Sec-WebSocket-Extensions: permessage-deflate Можете ли вы рассказать мне, как отключить разрешение-дефляцию? (Я использую встроенный сервер причала, поэтому, если это можно отключить от кода) –

+0

nevermind. Я понимаю это. Я проверю, не произойдет ли эта ошибка в ближайшие 2-3 дня, и я обновлю сообщение. благодаря –

 Смежные вопросы

  • Нет связанных вопросов^_^