2-минутная задержка при случайных запросах POST или PUT - PullRequest
3 голосов
/ 27 января 2012

Приблизительно 10% запросов POST или PUT, которые я делаю на HTTPS-сервер Node.js, занимает 2 минуты, чтобы получить ответ.Остальные 90% ведут себя так, как и ожидалось.

Я проверил с помощью tshark, что тело запроса получено сервером, но затем для запуска событий data и end требуется 2 минуты.Объект ServerRequest.

Запросы, которые испытывают эту задержку, кажутся случайными, но когда это происходит, время задержки между получением пакета и инициируемыми событиями «data» и «end» всегда точно2 минуты.

Для всех этих запросов я публикую небольшой объект json, который приходит в одном пакете.Для запросов с задержкой я знаю, что заголовки получены моим приложением, потому что cookie сессии анализируется немедленно.После аутентификации сеанса ничего не происходит до тех пор, пока события 'data' и 'end' не будут окончательно отправлены через 2 минуты, после чего тело будет проанализировано и сохранено в моей базе данных.

Вероятнее ли это проблема?с моим Node-приложением или проблема с моим сервером, который представляет собой небольшой экземпляр EC2 под управлением Amazon Linux?Как получается, что от момента получения пакета с телом запроса до моего пакета в качестве чанка уходит 2 минуты?

Спасибо.

Обновление: я изменил parser.onBodyв lib / http.js, чтобы войти 'b', и я вижу, что этот метод не вызывается до конца двухминутной задержки.Кажется, это указывает на то, что проблема находится на более низком уровне, чем мое приложение.Я также изменил экземпляры ec2, но это не помогло.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Трудно сказать, не зная точно, что приложение узла делает с каждым запросом.Например, если он должен общаться с другим бэкэнд-сервисом, он немного отличается от простого обслуживания изображения из кэша, находящегося в оперативной памяти.

Сказав это, небольшие экземпляры EC2 могут быть очень темпераментными.Они широко используются другими клиентами, поэтому иногда они могут странным образом не отвечать.Один из способов почувствовать это - запустить команду top в командной строке вашего экземпляра EC2.Найдите столбец% st, который является украденным.Если высокий, то это плохо, переключитесь на новый экземпляр EC2.(или получите больший)

1 голос
/ 28 января 2012

Я прослушивал события 'data' только после аутентификации. У меня req.on('data', function(chunk) {req.body += chunk}); в обратном вызове после аутентификации, а не в основной функции слушателя. Часто полезный груз приходил до того, как я начал его слушать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...