Дополнительные технологии для правильного использования node.js и Socket.IO в приложении, требующем много времени? - PullRequest
1 голос
/ 22 августа 2011

В качестве гипотетического примера, скажем, я хотел создать приложение, которое отображает сети Twitter людей. Я бы предоставил API, который позволил бы клиенту запрашивать одно имя пользователя. Лучшие твиты этого пользователя будут отправлены клиенту. Затем каждый человек, который был упомянут первым человеком, будет отсканирован. Их лучшие х твиты будут отправлены клиенту. Этот процесс будет рекурсивно продолжаться в ширину, пока не будет достигнута заранее заданная глубина. Клиент будет получать данные в режиме реального времени, отображая статистику, такую ​​как количество отсканированных пользователей, количество известных пользователей, оставшихся для сканирования, и растущий список данных твитов. Никакая обработка не является сложной (регулярное выражение небольших объемов текста), но многие, многие сетевые запросы будут порождаться из одного исходного запроса.

Мне очень нужны фантастические возможности node.js в режиме реального времени с socket.io, но я чувствую, что это злоупотребление этими технологиями - они не предназначены для тяжелой работы на стороне сервера. Есть ли более подходящий набор инструментов для того, чего я пытаюсь достичь, или какой-то конкретный способ использовать эти инструменты для этой цели? Milewise делает что-то похожее, но я думаю, что мое приложение будет потреблять значительно больше сетевых ресурсов, чем их.

Спасибо.

1 Ответ

1 голос
/ 22 августа 2011

Лучший сетевой транспорт, который вы можете получить в Интернете, - это WebSockets , который обеспечивает постоянное двунаправленное соединение в режиме реального времени между сервером и клиентом.Хотя не каждый браузер поддерживает их, socket.io предоставляет вам пару резервных решений , которые, однако, могут снизить производительность сети по сравнению с WebSockets, как указано в этой статье :

Во время установления соединения с WebSocket клиент и сервер обмениваются данными на кадр, каждый по 2 байта, по сравнению с 8 килобайтами заголовка http при непрерывном опросе.

...

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

Помимо сетевого транспорта, могут быть важны и другие вещи, например, как вы выбираете, форматируете и обрабатываете данныена стороне сервера.В node.js тяжелые вычисления, связанные с ЦП, могут блокировать обработку других асинхронных операций, поэтому операции такого рода следует отправлять в отдельные потоки или процессы, чтобы предотвратить блокировку.

...