2015-08-25 4 views
0

Максимальный размер аргументов при публикации события?jawampa максимальный размер websockt размер?

Я использую этот код (Java): wampClient.publish(token, response.toString());

response.toString() длинный JSON-строки в моем случае. Он имеет около 70 000 символов. У меня есть подозрение, что событие не публикуется, потому что, когда я заменяю response.toString() короткой строкой, событие публикуется, как и ожидалось.

Я не знаю много о внутренних компонентах Wamp, и начальная сессия отладки в коде не обеспечила меня большим пониманием. Как я сказал выше, я думаю, что длинная строка вызывает некоторые проблемы.

Минимальный ход Пример: Чтобы получить минимальный пример работы, пожалуйста, загрузите проект Java пример здесь: http://we.tl/a3kj3dzJ7N и импортировать его в IDE.

В папке demo имеются два файла .java: Client.java и Server.java Запуск/запуск обоих из них и графический интерфейс должны появиться для каждого. Затем выполните следующую процедуру (C = Client, S = Server):

C: hit start 
S: hit start 
C: hit publish 

в зависимости от размера сообщения вы увидите другой вывод на консоль вашего IDE. размер сообщения может быть изменен в строке 137 из Client.java через переменную целочисленного значения size. Как уже объяснялось выше: если size ниже 70000 (например, 60000), все работает так, как ожидалось. Выход консольной Client.java тогда следующим образом:

Open Client 
Session1 status changed to Connecting 
Session1 status changed to Connected 
Publishing 
Received event test.event with value 10000 

Однако, если целая переменная size изменяется на 70000 (или выше) выход заключается в следующем:

Open Client 
Session1 status changed to Connecting 
Session1 status changed to Connected 
Publishing 
Completed event test.event 
Session1 status changed to Disconnected 
Session1 status changed to Connecting 
Session1 status changed to Connected 

Как вы можете видеть Полученное событие ... отсутствует, следовательно, событие не получено. Тем не менее, есть Завершено событие test.event, но данные, очевидно, отсутствуют.

Чтобы подвести итог, при выполнении приведенного выше примера видно, что событие получено неправильно, если размер передаваемой строки больше 70000. Эта проблема может быть связана с netty, так как она используется под капюшон jawampa. Любая помощь приветствуется. Возможно, это небольшая конфигурация, которая может решить эту проблему.

EDIT 1: Я обновил вопрос с помощью минимального рабочего примера, который можно загрузить.

EDIT 2: Я думаю, что теперь я знаю корень проблемы (совершенно не уверен, хотя, см. EDIT3). Это связано с разрешенным размером строкового литерала в java. См.: Size of Initialisation string in java В приведенном выше примере я могу это отразить. Если переменная размера меньше 65535 символов, она работает, иначе она не работает. Есть ли обходной путь для этого?

РЕДАКТИРОВАТЬ 3 ака РЕШЕНИЕ: Как было предложено разработчиком (см here), в NettyWampConnectionConfig.java:8 переменная DEFAULT_MAX_FRAME_PAYLOAD_LENGTH должна быть изменена на более высокое значение. то все работает как шарм.

+0

Какой api вы используете? – delephin

+0

[jawampa] (https://github.com/Matthias247/jawampa) – beta

ответ

0

Как было предложено разработчиком (см here), переменная DEFAULT_MAX_FRAME_PAYLOAD_LENGTH может быть перезаписана через NettyWampConnectionConfig класса, который вы можете предоставить в NettyWampClientConnectorProvider класса. Значение переменной, очевидно, должно быть увеличено.

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