Демон обнаружения отключения пользователя (т. Е. «Состояние в сети») - PullRequest
1 голос
/ 14 августа 2010

Резюме: существует ли демон, который будет выполнять обратную передачу, когда пользователь подключается / отключается через TCP, или это хорошая идея написать одну?

подробности: Вокруг этого уже есть ряд вопросов; но я считаю, что это другой "поворот" на нем. Мы пишем веб-приложение на Ruby on Rails, и нам хотелось бы узнать, является ли пользователь «онлайн» или «оффлайн», где применяются следующие определения:

  • «онлайн» - браузер пользователя открыт и поддерживает TCP-соединение с одним из наших серверов.
  • "offline" - браузер пользователя больше не подключен к одному из наших серверов.

То, что мы считаем удобным способом сделать это, - это запустить совершенно отдельный сервер «онлайн-состояния», к которому каждый из наших пользователей будет подключаться (ровно один раз):

  • когда установлено соединение с сервером «онлайн-состояния», оно отправит ответ на наш реальный сайт RoR и сообщит ему «этот пользователь только что вошел в систему».
  • если соединение с сервером «онлайн-состояния» потеряно, оно отправит ответ на наш реальный сайт RoR и сообщит ему «этот пользователь только что вышел из системы».

Эта методология кажется разумной и поддерживает модульность (например, онлайн-сервер состояний будет довольно простым, что приятно). Мы можем написать этот онлайн-сервер состояний, но у нас есть следующие вопросы:

  1. Какие-либо специфические проблемы с вышеуказанной архитектурой, которые мы не учли?
  2. Есть ли демон или приложение, которое уже делает это? Зачем изобретать велосипед, если он уже написан?
  3. Существует ли какой-либо push-сервер, который предлагает эту функцию (т. Е. Он поддерживает соединения с пользователями, но отправляет или отправляет уведомления в восходящем направлении на веб-серверы, когда пользователь подключается или отключается?)

1 Ответ

0 голосов
/ 14 августа 2010

Это то, что, по вашему мнению, пользователи будут устанавливать в своих системах?

Если вы ищете систему на основе браузера, WebSockets, вероятно, ваш единственный вариант, использующий что-то вроде Socket.IO http://socket.io/.

Сервер сокетов node.js, предоставляемый в рамках этого проекта, можно найти на github: http://github.com/LearnBoost/Socket.IO-node

Node.js - отличная платформа, предназначенная именно для этой проблемной области, и для узла существует несколько серверов WebSocket.

Если ваше приложение не полностью основано на ajax и использует одну родительскую страницу, вам потребуется создать постоянный родительский фрейм, содержащий сокет, который оборачивает ваше приложение, поскольку каждый раз, когда пользователь щелкает ссылку, страница выгружается и перезагружается, что приводит к отключение и повторное подключение от государственного сервера.

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