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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.11.2006, 19:58
K@@ вне форума Посмотреть профиль Отправить личное сообщение для K@@ Найти все сообщения от K@@
  № 1  
Ответить с цитированием
K@@

Регистрация: Dec 2005
Сообщений: 6
По умолчанию Чат PHP+Flash+MySQL: как опеределить наличие пользователя в чате?

Привет!
Собственно, в заголовке и весь вопрос, но немного поясню:
Есть чат, он вполне работает, но когда пользователь внезапно отключается от чата или от сети, у меня его имя продолжает висеть в числе пользователей.
Сначала я хотел использовать socket на PHP, но из-за недостаточности опыта в работе с сокетами, он у меня получился очень сырой и жутко глючный. Пришлось отказаться, ума не хватило.

Может быть использовать XMLSocket? Но тогда как? Я даже не знаю в каком направлении копать...

Может ли кто-нибудь помочь в таком вопросе?
Как сразу же после отключения пользователя (т.е. без задержек), в том числе и внезапного отключения, определить что его уже нет?

Спасибо.

Старый 03.11.2006, 20:14
Bright вне форума Посмотреть профиль Отправить личное сообщение для Bright Найти все сообщения от Bright
  № 2  
Ответить с цитированием
Bright
 
Аватар для Bright

Регистрация: Nov 2003
Адрес: www.flasher.ru/forum
Сообщений: 946
вообще такое делают по последней активности, но там не избежать задержек...
__________________
44px|freealt|...

Старый 03.11.2006, 20:44
K@@ вне форума Посмотреть профиль Отправить личное сообщение для K@@ Найти все сообщения от K@@
  № 3  
Ответить с цитированием
K@@

Регистрация: Dec 2005
Сообщений: 6
Bright, а может заставить клиента постоянно посылать на сервер небольшое сообщение о присутствии. А сервер, если не получит через заданный промежуток сообщение, будет уверен, что клиента уже нет.
Не будет ли это большой нагрузкой на сервер?
И вообще в плане надежности - такое возможно или нет?

И про последнюю активность - можно подробнее?

Кстати, пробовал ковырять FlashChat - оказалось, что там есть то, что мне нужно, но настолько профессионально написано... Сами знаете какого это - копаться в чужом коде. Получается, что все-таки не только по последней активности - есть и еще способы.


Последний раз редактировалось K@@; 03.11.2006 в 20:48.
Старый 04.11.2006, 17:10
Bright вне форума Посмотреть профиль Отправить личное сообщение для Bright Найти все сообщения от Bright
  № 4  
Ответить с цитированием
Bright
 
Аватар для Bright

Регистрация: Nov 2003
Адрес: www.flasher.ru/forum
Сообщений: 946
большая-небольшая, но это пустая нагрузка на сервер...

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

насчет исходников - можно и на флэшере поискать, такие темы были, там были исходники. может, что попроще найдется.
__________________
44px|freealt|...

Старый 08.11.2006, 12:41
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 5  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Каа, а насколько сильно ты удивишься, если узнаешь, что пользователь "в чате" находится крайне малое время, примерно такое, какое нужно серверу чтобы сгенерировать ответ "Ок" ?
И отключение пользователя - если, конечно, речь не идет о клиент-серверном приложении, а о встроенном в браузер флэш-объекте - происходит в тот момент, когда пользователь (его браузер) отослал на сервер "Connection: close", то есть каждый клик мышой на ссылке и на каждый вызов getURL() и им подобных.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 08.11.2006, 18:03
K@@ вне форума Посмотреть профиль Отправить личное сообщение для K@@ Найти все сообщения от K@@
  № 6  
Ответить с цитированием
K@@

Регистрация: Dec 2005
Сообщений: 6
Skubent,
Цитата:
если, конечно, речь не идет о клиент-серверном приложении, а о встроенном в браузер флэш-объекте
Именно о нем речь и идет.

Да, я понимаю про "крайне малое время" и совсем не удивился этому.

Цитата:
происходит в тот момент, когда пользователь (его браузер) отослал на сервер "Connection: close"
Это в случае завершения работы так как положено. А вот если, скажем электричество внезапно отрубили или комп решил сходить в перезагрузку - это уже нештатная ситуация. Как тут быть? Кто отправит на сервер "Connection: close"? Если в чате скажем человек 100 сидит, то опрашивать всех - это не вариант, хотя мож быть я и ошибаюсь.

Жаль, но я так и не получил ответа на вопрос. Неужели никто не сталкивался с этим вопросом? Кто-нибудь нашел решение?

Bright,
Цитата:
насчет исходников - можно и на флэшере поискать, такие темы были, там были исходники. может, что попроще найдется.
Поискал. Не нашел. Я плохо искал?

Старый 09.11.2006, 12:38
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 7  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Забудь про сбой питания. Шанс того, что питание отпадет именно в тот момент, в который в сеть уходит пакет с куском заголовка сообщения равен нулю. Можешь поэкспериментировать, торкая в ресет при общении с каким либо сервером.
А закрытие соединения отправляется при КАЖДОМ запросе от пользователя.

При перезагрузке соединения таки закрываются.

А по твоему вопросу - выбираешь таймаут (скажем, три минуты), пишешь в отдельную таблицу время последнего действия каждого пользователя. Выкидываешь из чата всех, у кого время последнего действия < (текущее время - таймаут).
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 09.11.2006, 17:50
Bright вне форума Посмотреть профиль Отправить личное сообщение для Bright Найти все сообщения от Bright
  № 8  
Ответить с цитированием
Bright
 
Аватар для Bright

Регистрация: Nov 2003
Адрес: www.flasher.ru/forum
Сообщений: 946
Хм... Может быть...

В исходниках нет?

могу еще у себя посмотреть.
__________________
44px|freealt|...

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

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

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


 


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


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