Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492

Как узнать "кто онлайн?" в своей социальной сети

06.03.2012, 05:56. Показов 8659. Ответов 34
Метки нет (Все метки)

Подскажите пожалуйста, при создании соцсети, как сделать функцию которая будет проверять онлайн пользователь или нет, а потом выводит сообшение "online" если пользователь будет в сети??
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2012, 05:56
Ответы с готовыми решениями:

Как создать мобильную версию своей социальной сети на мобильные устройства?
Здравствуйте всем. Возник такой вопрос. Как создать мобильную версию своей социальной сети на мобильные устройства(winphone само собой). Не...

Как узнать, кто онлайн
привет. Решил написать такой модуль как кто онлайн на сайте. ну определить количество онлайн было не сложно ...

Как узнать, кто заходит ко мне на компьютер из сети?
Как узнать кто заходит ко мне на компьютер из интернета? Здесь вроде не форум для слабовидящих...нарушаете правила п.3.4 Добавлено...

34
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
07.03.2012, 17:53
Хм, т.е. вконтакте с facebook - плохой пример?
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
07.03.2012, 17:53
Цитата Сообщение от Art-corp Посмотреть сообщение
Чаты не стоит писать на PHP
на чем стОит? если весь сайт на РНР
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
07.03.2012, 17:54
Цитата Сообщение от Art-corp Посмотреть сообщение
Не уверен, но вроде бы Вы не совсем правы. Функция делает два действия, либо устанавливает, либо возвращает SID (в зависимости от наличия необязательного параметра). В примере fireridlle идентификатор получается. Думаю, вызываться перед session_start() функция session_id() должна в случае, если она устанавливает идентификатор. Если мы установим идентификатор после запуска сессии, то смысл этой установки теряется. Ведь так?
PHP
1
2
3
session_id('t1');
session_start();
var_dump(session_id());
Выполните такой код

PHP
1
2
3
session_start();
session_id('t1');
var_dump(session_id());
и такой
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 18:11
Цитата Сообщение от arvitaly Посмотреть сообщение
Хм, т.е. вконтакте с facebook - плохой пример?
Вконтакте, насколько я знаю, каждые n секунд летит запрос на сервак, который возвращает множество информации, например, новые посты на стене, лайки и т. д. Личные сообщения реализованы по слухам на NodeJS (серверный JavaScript, мало где есть). Это ответ Love_and_Peace. Можно использовать разные технологии. PHP для всего не годится.
Да и контакт с фейсбуком могут себе позволить несколько большую нагрузку, с их серваками. А мы не можем.

А по поводу сессии... Многоуважаемый arvitaly, я запускать предложенные скрипты не стал. Я знаю, что один из них будет работать, а второй нет. Если Вы перечитаете моё сообщение ещё раз, то поймёте, что в первый раз читали невнимательно.

Добавлено через 55 секунд
Чуть попозже смогу сказать, какие и зачем летят запросы Вконтакте - поговорю с JS-кодером.
0
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492
07.03.2012, 18:48  [ТС]
Ладно, раз всё так далеко зашло, то осмелюсь спросить:
Возьмём к примеру аську, там как всё устроено? возможно ведь такоеже осуществить в соцсети?
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 19:09
Хм, аська Честно, не знаю, как там устроено, но точно не PHP, это гарантирую)) Есть два варианта: передача сообщений минуя сервер и передача от клиента к клиенту (p2p). Как в аське - хз, да и не важно...

Рассмотрим пример "мгновенных" сообщений Вконтакте. Я пишу другу сообщение. Как только я его отправил, оно добавляется в БД. Скрипт на странице в браузере моего друга отправляет каждые n мс. запрос, типа "что-то изменилось на серваке? Появились новые мессаджи?". И если новые сообщения есть, они все возвращаются, скажем, в json формате ему. Это плохой подход, ибо слишком много ненужных запросов - мы слишком часто пытаемся узнать, не добавились ли новые сообщения и чаще всего ответ будет отрицательным. Проще говоря, мы зазря насилуем базу данных. Идеально было бы лезть в БД, зная, что там точно есть новые сообщения. Можно использовать Shared Memory - технологию, позволяющую хранить на серваке какие-либо данные, доступные разным пользователях по какому-то идентификатору. В этой области памяти мой скрипт и скрипт друга будут хранить id последнего добавленного в БД сообщения. И каждый раз, отправляя запрос на сервак за новой порцией данных, слать туда id последнего сообщения отображаемого у нас в браузере(!). Скрипт на серваке смотрит, не превышает ли id, хранящееся в общей ячейке памяти id последнего полученного сообщения. Если номер на серваке больше номера последнего ранее полученного сообщения, то тогда мы понимаем, что в БД есть новые сообщения и достаём их, если id равны, то новых сообщений нет и в ответ - null. Идея в том, что мы лезем в БД лишь тогда, когда точно знаем, что там есть что-то новенькое. Вместо Shared Memory можно, конечно, использовать, скажем, временный файлик, куда будем писать id последнего сообщения, но, думаю, это медленнее и менее удобно.

НО и этот вариант далёк от идеала, ведь запросы мы вынуждены посылать также часто, как и раньше, благо что БД разгрузили. В идеале, скрипт на клиенте ничего не пингует, а получает от сервака новые сообщения по его инициативе. Это и есть серверный JS - NodeJS. Вконтакте, вроде бы, именно он и используется. Однако мало на каких хостингах он есть. Сам NodeJS, равно как и JS, я не знаю.

Zazu, поймите, не нужно Вам так часто менять статус "онлайн". Обновлять время последней активности, думаю, достаточно лишь раз в минуту (пусть 30 сек.), а если хотите, глядя на страницу друга увидеть, как его статус изменится с "онлайн" на "оффлайн" (без перезагрузки, используя AJAX), то тоже не переусердствуйте (1 минута - нормально), да и подумайте - нужно ли это, ведь я и мои пять друзей, профили которых открыты у меня во вкладках браузера, могут пойти спать, а 5 скриптов так и будут стучаться к БД (пусть и не часто), пытаясь застукать спящих друзей онлайн...
0
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492
08.03.2012, 01:19  [ТС]
а как в Ajax устанавливать время, через которое он должен обновлять значение?
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
08.03.2012, 02:02
Zazu, если использовать jQuery, то примерно вот так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var interval = 5000; // интервал в миллисекундах (5 мин)
 
function checkUsersOnline() {
    $.get('адрес php-скрипта', {
        'параметр1': 'значение1',
        'параметр2': 'значение2' //,
        // ...
        'параметрN': 'значениеN'
    }, function (data) {
        callback(data);
    });
}
 
function callback(data) {
 
    // тут должна быть обработка ответа сервера
    
    setInterval(function () {
        checkUsersOnline();
    }, interval);   
}
 
checkUsersOnline();
Код схематичен и это всё позволит лишь примерно узнать как такое сделать. Для реализации нужен знать, что будет возвращать сервер и в каком формате. Кроме того подобная схема не будет работать если хотя бы один запрос не выполнится корректно.
1
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
08.03.2012, 11:17
Цитата Сообщение от Art-corp Посмотреть сообщение
А по поводу сессии... Многоуважаемый arvitaly, я запускать предложенные скрипты не стал. Я знаю, что один из них будет работать, а второй нет. Если Вы перечитаете моё сообщение ещё раз, то поймёте, что в первый раз читали невнимательно.
Как раз таки работать будут оба
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
08.03.2012, 13:19
Цитата Сообщение от arvitaly Посмотреть сообщение
Как раз таки работать будут оба
да, тока во втором случае эта ф-я заменит (перепишет) текущий SID

Добавлено через 1 минуту
Zazu, icq это десктопная прога, ее можно написать хоть на Delphi, насколько я помню, там есть специальные модули позволяющие связываться с сервером (popup)
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
08.03.2012, 15:07
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
да, тока во втором случае эта ф-я заменит (перепишет) текущий SID
разве?
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
08.03.2012, 15:56
Цитата Сообщение от arvitaly Посмотреть сообщение
Как раз таки работать будут оба
Да, немного тупанул, как сказал Love_and_Peace, функция перепишет SID и, как я думаю, с этого момента работая с сессией, мы будем работать с другими данными, присущими новому идентификатору.
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
08.03.2012, 16:13
Да, немного тупанул, как сказал Love_and_Peace, функция перепишет SID и, как я думаю, с этого момента работая с сессией, мы будем работать с другими данными, присущими новому идентификатору.
Это тоже не так
PHP
1
2
3
4
5
6
7
session_id('t0');
session_start();
$_SESSION['t'] = 1;
session_id('t1');
var_dump($_SESSION);
session_id('t2');
var_dump($_SESSION);
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
08.03.2012, 16:15
так, ребята, смотрим в документацию -
session_id - получает и/или устанавливает id текущей сессии.
Если id специфицирован, он замещает текущий session id. При этом session_id() необходимо вызывать до session_start().

- Получается эта ф-я перепишет текущий SID в случае если задать ей параметр, иначе не будет перезаписывать.
вот не помню, где то читал, что session_id надо ызывать до session_start()
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
08.03.2012, 16:28
Просто нужно понимать что делает session_start, функция формирует заголовок для браузера, устанавливающий в cookie параметр - PHPSESSID и соответственно session_id задает значение для этого параметра. Но в течение выполнения одного скрипта может понадобиться изменить session_id (для последующих вызовов) - если допустим за время исполнения скрипта данные изменятся. Это редкий случай, но возможный. Я к тому, что главное - понимать как что работает, а не просто знать, что нужно делать так или иначе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2012, 16:28

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

Отслеживание трафика в сети или как узнать кто где шарил?
Возник вопрос по отслеживанию трафика в локальной сети с интернетом. Приведу вопросы в примерах: 1) как узнать какие сайты посещал...

Как узнать, кто заходил в папку (или делал изменения), которая находится в сети
У нас доменная сеть, у каждого пользователя есть своя учетка. Помогите написать прогу которая фиксирует кто заходил в папку последний.

Как заработать в социальной сети
Всем привет! Если создать группу и публиковать в нее арбитражные ссылки, можно ли нормально на этом заработать?

Как починить музыку в социальной сети?
Доброго всем. Создал социальную сеть. Музыка загружается нормально, но не играет при нажатии на иконку плей. Вот скрин с ошибками: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru