Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.04.2011, 00:33
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Юзер онлайн/офлайн

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

Есть две группы юзеров. Одна (многочисленная) должна всегда знать онлайн юзер из второй группы (20-30 членов) или нет. Записываю всех членов из второй группы в БД. Когда члены второй группы заходят в приложение, то в БД ставлю флаг - онлайн. Когда юзеры из первой группы заходят в приложение, то они получают инфу по всем кто сейчас онлайн из второй группы - это просто делается запрос к БД. До этого момента все хорошо. Но теперь член из второй группы решил закрыть приложение никого не уведомив.

Вопрос: как лучше проверять наличие онлайн членов второй группы?

Первое что приходит на ум, это кроме того, чтобы записывать в БД опцию членов второй группы, постоянно проверять при открытии приложения остальными юзерами наличие членов второй группы и тоже писать их статус в базу. Но тогда юзер, который открыл 5 минут назад приложение никогда не узнает, что член из второй группы покинул приложение 3 минуты назад и будет проблема.

Можно ещё делать проверки по таймеру, но непонятно в какой позиции? И не положат ли сервак многочисленные проверки?

Старый 25.04.2011, 01:04
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Пусть эти 30 чел. раз в минуту (или сколько нравится) апдейтят свой статус (просто писать время).
Если время последнего апдейта больше 1.5 минуты - он оффлайн.
Или эти 30 коннектятся сокетом - при коннекте писать флаг, что он есть, при дисконнекте его сбрасывать.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 25.04.2011, 01:25
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 3  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Как то тоже делал подобную штуку. Насколько я понял, нет достоверного способа определить когда пользователь закрыл браузер, и даже, когда перешёл на другую вкладку поддерживается только, кажется, ФФ, в JS есть методы окончания сессии, но они не успевают срабатывать до закрытия браузера. Основная политика такая: сервер некоторое время (кажется 10мин.) держит сессию пользователя активной, если за это время страница ни разу не послала запрос сервер закрывает сессию, и если нет параллельного наблюдения в куках, то в следующий запрос с той же страницы уже считается новой сессией.

Решается, да, в основном пингом, через ajax, через произвольные промежутки. Где то видел скрипт на TCL, автор утверждал, что при одновременном нахождении в чате 150 чел. потребляемые ресурсы памяти будут в пределах, кажется 40Мб, за счёт того, что TCL может демона подвесить на сервере. Но TCL обычно не установлен, об этом надо просить админов.

Старый 25.04.2011, 10:50
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 4  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
В случае с сокетом можно достоверно выяснить, подключен ли пользователь или нет. Для этого достаточно отправить ему какое-нибудь сообщение (т.н. пинг). Вывалится сообщение - пользователь оффлайн.

Старый 25.04.2011, 11:35
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 5  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Нет, я не использую соекты, а stratus для чата.
Цитата:
Пусть эти 30 чел. раз в минуту (или сколько нравится) апдейтят свой статус (просто писать время).
Это интересное решение. А время лучше брать из флэшки и передавать в PHP или вызывать скрипт и из PHP уже брать? Как точнее?

Задача немного усложняется тем, что вообще-то у члена второй группы должно быть не два статуса, а три (онлайн, офлайн и занят). Третий статус возникает во время чата с одним из юзеров и член становится недоступен для остальных юзеров. Когда чатящийся юзер любым способом покидает чат, то статус члена опять возвращается в онлайн. И вот здесь тоже проблема - если юзер просто закрыл окно браузера, это никак не отражается у члена и не пойму как его перевести опять в онлайн.

fish_r, спасибо, но TCL, ajax - это сложнова-то.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.