Как мгновенно уведомить вошедшего в систему пользователя о коротком сообщении - PullRequest
0 голосов
/ 18 сентября 2011

Краткое описание задачи: я хочу, чтобы один вошедший в систему пользователь мог отправить мгновенное короткое текстовое сообщение другому зарегистрированному пользователю. Решение должно быть легко масштабируемым и не слишком требовательным к ресурсам с точки зрения пропускной способности и нагрузки на сервер (и $$).

Первой идеей было сделать опрос клиентов, но от этой идеи быстро отказались, поскольку она не отвечала требованию масштабируемости. Итак, после этого я занялся исследованиями и натолкнулся на ряд концепций, включая сокеты, node.js, xmpp. Объем информации немного ошеломляющий, поэтому я надеялся, что какой-нибудь совет укажет мне правильные направления. Надеюсь, что-нибудь с легкодоступными решениями хостинга.

@ epascarello: спасибо за быстрый ответ. Я сделал, но не подробно. Прежде чем углубляться в какие-либо технологии, я хочу знать, что это именно то, что мне нужно.

Большинство примеров сосредоточены на мгновенном чате, но мои требования несколько иные. Мне не нужен каждый зарегистрированный пользователь, чтобы увидеть сообщение, но только один конкретный пользователь, для которого оно предназначалось, в то время как, скажем, в системе может быть зарегистрировано 100 000 пользователей ...

@ Саид Нимати: Спасибо! Да, я в значительной степени понимаю два варианта взаимодействия клиент-сервер и пришел к выводу, что вытягивание - это запрет. Сейчас я пытаюсь найти наиболее масштабируемую (это основная предпосылка) и (надеюсь) простую реализацию push-опции. Например, опция сокета относительно проста, но кажется, что она не будет хорошо масштабироваться из-за перегрузки сервера (или я ошибаюсь). Файл node.js (по крайней мере, по описанию концепции) должен быть лучше, но я хотел бы получить подтверждение этому предположению. С xmpp - я даже не уверен, насколько это относится к моей задаче и как к ней подойти.

@ andyuk: Энди, спасибо. Да, socket.io - это то, что я нашел, когда проводил исследования. Насколько я понимаю, для этого требуется серверный модуль, который должен работать на хосте. Знаете ли вы, если это возможно, чтобы работать на любом сервере, или мне нужно искать специализированную хостинговую компанию? Сайт socket.io по какой-то причине не работает на моем ПК (ни IE, ни FF).

Ответы [ 3 ]

0 голосов
/ 18 сентября 2011

Слушайте, у вас есть только два варианта взаимодействия клиент-сервер. Либо клиент запускает запрос (HTTP-запрос в Интернете), который называется pull model (как клиент извлекает запрос из сервера), и сервер отвечает на это, либо сервер запускает ответ напрямую без получение любого запроса (HTTP-ответа в Интернете), который называется push-модель (например, сервер отправляет данные клиенту).

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

Но, с другой стороны, когда вы хотите использовать push-модель, ваш сервер должен знать клиента. Другими словами, мы знаем, что HTTP (на основе TCP / IP) является протоколом без сохранения состояния, что означает, что после каждого запроса ваше соединение закрывается, и сервер теряет вас и забывает о вас.

Если вы хотите, чтобы сервер знал клиента, вы должны оставить соединение открытым . Обычно это делается с помощью некоторых HTTP-заголовков, таких как Keep-Alive и Connection .

Но для этого нужно прочитать Программирование кометы . Однако это снижает вашу масштабируемость, поскольку остается больше открытых соединений для однозначного сопоставления между соединением и клиентом (чтобы лучше это понять, вы можете рассматривать соединения как двери сервера. Чем больше вы занимаетесь дверью как клиент, тем меньше другие клиенты могут его использовать).

0 голосов
/ 19 сентября 2011

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

Существует даже пример чата, включенный в исходный код.

Что касается вашего беспокойства по поводу масштабируемости, то node.js идеально подходит для этого благодаря своей управляемой событиями неблокирующей природе.Обработка множества открытых соединений - одна из сильных сторон Node.

Plurk использует Node.js для своих функций чата в реальном времени и поддерживает более 100 000 пользователей.

0 голосов
/ 18 сентября 2011

Вы смотрели исходный код из чата nodejs. ?

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