Сервер отправляет оборваные ответы
Использую реалплексор на нагруженном проекте. Когда выполняю метод cmdOnline, получаю такую ошибку:
Fatal error: Uncaught exception 'Realplexor_Exception' with message 'Response length (56421) is different than specified in Content-Length header (77807): possibly broken response
Так-же такая ошибка иногда возникает при вызове метода cmdWatch.
Пробывал отправлять команды напрямую через телнет, получаю оборваные ответы, тоесть проблема явно с сервером.
Есть такая проблема, что иногда ответ не помещается целым куском в буфер отправки tcp ОС, а разбивать отправку на несколько независимых кусков реалплексор не умеет архитектурно (ПРИЕМ "склеивать" из кусков он умеет, а вот отправку - нет, т.к. у него нет своих собственных буферов отправки: сформировал ответ, выплюнул его разом и забыл).
Попробуйте поискать, как увеличить размер буфера приема tcp в линуксе.
On Thu, Jun 13, 2013 at 3:46 AM, Andrei K. [email protected] wrote:
Использую реалплексор на нагруженном проекте. Когда выполняю метод cmdOnline, получаю такую ошибку: Fatal error: Uncaught exception 'Realplexor_Exception' with message 'Response length (56421) is different than specified in Content-Length header (77807): possibly broken response Так-же такая ошибка иногда возникает при вызове метода cmdWatch.
Пробывал отправлять команды напрямую через телнет, получаю оборваные ответы, тоесть явно проблема с сервером.
Reply to this email directly or view it on GitHub: https://github.com/DmitryKoterov/dklab_realplexor/issues/27
та же проблема, но сервер обрывает ответы с JS Это работает на странице монитора и должно собирать данные с множества каналов за последнии несколько минут.
http://realplex01.xxxxxxxxx.com/?identifier=1392765575.7760000000:support_id_9916560,1392765575.7770000000:support_id_9916561,1392765575.7770000000:support_id_9916573,1392765575.7770000000:support_id_9916583,1392765575.7770000000:support_id_9916690,1392765575.7770000000:support_id_9916712,1392765575.7770000000:support_id_9916738,1392765575.7770000000:support_id_9916751,1392765575.7770000000:support_id_9916754,1392765575.7770000000:support_id_9916758,1392765575.7770000000:support_id_9916762,1392765575.7770000000:support_id_9916768,1392765575.7770000000:support_id_9916769,1392765575.7770000000:support_id_9916679,1392765575.7770000000:support_id_9916764,1392765575.7770000000:support_id_9916770,1392765575.7770000000:support_id_9916771,1392765575.7770000000:support_id_9916784,1392765575.7770000000:support_id_9916786,1392765575.7770000000:support_id_9916772,1392765575.7770000000:support_id_9916778,1392765575.7770000000:support_id_9916781,1392765575.7770000000:support_id_9916782,1392765575.7770000000:support_id_9916705,1392765575.7770000000:support_id_9916746,1392765575.7770000000:support_id_9916773,1392765575.7770000000:support_id_9916775,1392765575.7770000000:support_id_9916776,1392765575.7770000000:support_id_9916777,1392765575.7770000000:support_id_9916780,1392765575.7770000000:support_id_9916783,1392765575.7770000000:support_id_9916766,1392765575.7770000000:support_id_9916779,1392765575.7770000000:support_id_9916785,support_request_process&ncrnd=1392766177184
Если данных больше 16к то они обрезаются, соответственно ошибки и запрос повторяется X раз.
Пример обрезанного ответа:
[
{
"ids": { "support_id_9916751": "1392765581.01901932852" },
"data": "{\"cmd\":\"msg\",\"type\":\"op\",\"time\":\"15:19:41\",\"text\":\"sure thing, the 6 pcs\\\/\",\"name\":\"Maruwa\"}"
},
{
"ids": { "support_id_9916762": "1392765627.18003308272" },
"data": "{\"cmd\":\"msg\",\"type\":\"cl\",\"text\":\"IP: 205.255.24.0, OS: Android (samsung, SGH-T599N), version: 4.1.2, app version: 2.4.4, resolution: 480x800, fingerprint: 9ede0dd2-7f9b-4086-b534-57fab0ef0213\",\"name\":\"Claudia\"}"
},
... пропущено много строк ...
{
"ids": { "support_id_9916776": "1392765963.46914281638" },
"data": "{\"id\":\"9916776\",\"cmd\":\"accept_request\",\"op_id\":\"450\",\"name\":\"Liz\"}"
},
{
"ids": { "support_id_9916776":
Пробовали увеличить размер буфера приема tcp, не помогло
p.s. используем последнюю C версию
Спасибо.
у меня проблема решилась случайным образом - в процессе поиска причины ошибки добавил лог в perl/Realplexor/Common.pm logger("out: " . $out); в конец _do_send. по какой-то причине реалплексор перестал резать ответы