2011-01-02 2 views
0

У меня есть чат на моем сайте. Я хочу составить список пользователей онлайн в чате.Запишите, какая страница пользователь на данный момент на

Каков наилучший способ для этого? Должна ли быть зарегистрирована последняя страница, которую посетил пользователь, и если она была той страницей, они находятся в чате?

Какие другие методы могут быть использованы для этого?

Благодаря

ответ

1

Если вы используете Comet в приложении чата, то вы будете иметь канал, открытый для сервера, который будет привязан к стороне клиента, как запрос открытого HTTP.

Пока этот запрос открыт, пользователь находится в комнате. Если запрос закрывается, пользователь больше не находится в комнате.

+0

Я никогда не слышал о кометах, я использую пакет чата Yshout – sark9012

+0

Если вы используете сторонний пакет, а не что-то, что вы создали, то идея вашей страницы будет в порядке. Я не знаю, можете ли вы сказать, вышел ли кто-нибудь из комнаты или нет. Это зависит от того, находится ли окно чата в вашем домене или нет. Если это так, вы можете поставить window.setTimeout на место, чтобы периодически пинговать ваш веб-сервер с помощью keepalive, который гласит: «Я все еще здесь!». – jmort253

+0

Да, окно чата находится на моем собственном сервере. Мне нравится эта идея использования setimeout. Должен ли я google это? Что касается того, что я изначально предложил, если бы пользователь открыл второе окно на второй вкладке, это, конечно, означало бы, что в чате будет видно, что их там нет? – sark9012

0

Yshout работает, выполняя запрос AJAX против yshout/yshout.php каждые 6 секунд. Добавьте немного кода в yshout.php для отслеживания количества уникальных пользователей, которые он видел за последние 10 секунд, и вы должны быть установлены.

Edit: вы хотите имена каждого активного в чате? У меня возникнет соблазн добавить таблицу базы данных для этого - каждый раз, когда они нажимают на yshout.php, добавьте запись с именем + timestamp и удалите все записи более 10 секунд. Затем запросите имя GROUP BY, чтобы получить уникальные пользователи.

Edit 2: чата клиент уже делает-запрос AJAX на yshout.php каждые шесть секунд. Все, что вам нужно сделать, это добавить фрагмент кода PHP в поле «if (isset ($ _ POST ['reqFor'])) (бит, который отвечает на запросы AJAX).

Держите его коротким! Помните, что его забивают примерно 150 раз в минуту.

+0

Идея качества. Я думаю, что это тот, с которым я поеду. Чтобы создать обновленный список, используйте запрос AJAX каждые 6 секунд для обновления списка и удаления чего-либо старше 10 секунд? – sark9012

+0

Итак, вы думаете, что лучшая идея состоит в том, чтобы поместить PHP в этот reqFor, который идет в базу данных, добавляет новую запись и удаляет старые? – sark9012

0

Я бы использовал библиотеку javascript sessions для записи каждой страницы, которую посетил пользователь, а затем получить эти значения в вашем чат-клиенте с помощью javascript.

  • Включает библиотеку на каждой странице.
  • в sessvars объект, сделать массив sessvars.visited = []; [если sessvars.visited еще не массив]
  • Теперь на каждой странице сделать что-то вроде этого sessvars.visited[] = location.href
  • На странице клиента чата, использовать JavaScript, чтобы перебирать sessvars.visited для получения всех URL-адресов. Например, чтобы список из URL-адреса в HTML ж/Jquery сделать следующее:

var urlList = ''; 
$.each(sessvars.visited, function(key, value){ 
    urlList += value + '<br />'; 
}) 

Примечание: Sessvars является альтернативой Куки, которая имеет очень большую емкость (10mb в большинстве браузеров). Однако данные сеанса доступны только в активном окне. Информация теряется после закрытия окна и, насколько я знаю, не может быть запрошена из других окон. Поэтому, если чат открыт в другом окне, чем в браузере, это не сработает.

0

Вы должны сделать javascript-запрос на сервер каждые x секунд.

Вы уже должны это сделать (для получения текущего чата и списка участвующих пользователей).

На стороне сервера вы знаете, из-за этого пользователя, пользователей. Вам просто нужно регистрировать эти запросы.

Смежные вопросы