Node.JS Сокет-сервер и соединение на одном сервере замедляются - PullRequest
2 голосов
/ 18 марта 2011

Возможно, я здесь что-то не так делаю, но по сути у меня есть сервисный уровень, который перехватывает пост-запросы на определенный URL-адрес. Важно, чтобы он никогда не отключался, поэтому я изолировал его от основного сервера. Я подумал, что было бы проще, чтобы сервисный уровень принимал http-запросы и отправлял полученный XML-пакет по любым подключенным потокам. Ну, технически это работает, но у меня проблема в том, что сервер и клиент находятся на одной машине, и кажется, что stream.write заполняет буфер ядра и замедляет промежуток времени между моментами его обращения. уровень обслуживания до того момента, когда он действительно попадает к клиенту

На стороне сервера

  • При подключении я помещаю поток в массив соединений, я также устанавливаю интервал, чтобы убедиться, что получил сообщение в течение последних 12 секунд (сердцебиение).

  • При получении я выполняю итерацию по массиву потока, убедитесь, что он доступен для записи, и запишите в него пакет xml.

На стороне клиента

  • Напишите «Heartbeat» каждые 8 ​​секунд, чтобы убедиться, что я не отключен

  • При входящем сообщении я анализирую XML в объект JSON и обрабатываю его на сервере.

Ничего в этом не кажется возмутительным, но я могу что-то упустить.

1 Ответ

0 голосов
/ 30 марта 2011

Я подумал, что было бы проще, если бы сервисный уровень принимал запросы http и отправлял полученный XML-пакет по любым подключенным потокам.

Следует помнить, что буферы узловвещи, отправленные через потоки.Как вы заметили, «stream.write заполняет буфер ядра», это намеренное поведение, так как обычно для связи таким способом потоки не используются.Вы можете попробовать что-то другое, например, отправлять запросы через сокеты в ваш другой процесс?

Надеюсь, это немного поможет?

Остановка в # node.js и задавайте нам вопросы в любое время!

Редактировать: если подумать, вы уже используете сокеты?Если так, мой ответ действительно бесполезен, извиняюсь.

...