Jquery... Пользователь пишет...

PhantomUA

Инквизитор
Модератор
Регистрация
2 Июл 2006
Сообщения
759
Реакции
1.098
Есть задача...
Есть система отправки сообщений.. Нужно сделать чтобы в момент написания пользователем сообщения другому пользователю - в окне сообщений адресата писало: Пользователь пишет.. (Как это примерно работает в Вконтакте или Однокласниках..)
Просьба направить в нужное русло с вариантами реализации...
 
Совсем недавно делал себе живой посик на сайте, используя jQuery.ajax(), думаю, что здесь его тоже можно применить.
 
Со стороны JS такое не проблема сделать. Можно использовать WebSocket (уже есть тысяча реализаций эмуляции для древних браузеров).
То есть, нужна двухсторонняя связь браузер-сервер.
Возможно, проблемы возникнут с программированием серверной части. Возникнут проблемы только в одном случае, если серверная часть реализуется на php. Сервер WebSocket лучше держать на вдс или дедике. Можно весь сайт сделать на пыхе, а механизм чата сделать на с++, питоне или nodejs.
 
Да но...
От чего отталкиватся и какие запросы передавать и проверять пишет ли сообщение чтобы другому показывать... Понятно что привязыватся к ид пользователя одного и второго и делать проверки.. но пока все туманно это представляю...

Со стороны JS такое не проблема сделать. Можно использовать WebSocket (уже есть тысяча реализаций эмуляции для древних браузеров).
То есть, нужна двухсторонняя связь браузер-сервер.
Возможно, проблемы возникнут с программированием серверной части. Возникнут проблемы только в одном случае, если серверная часть реализуется на php. Сервер WebSocket лучше держать на вдс или дедике. Можно весь сайт сделать на пыхе, а механизм чата сделать на с++, питоне или nodejs.
Весь сайт как раз на пыхе.. и в нем просто доделывается система сообщений...
Если возможность это сделать просто на jquery без дополнительной реализации сервера на чем-то другом типа nodejs или подобном.. С этим просто не сталкивался..
 
Ну WebSocket-сервер должен быть запущен всегда, круглосуточно. Браузер держит связь через WebSocket c сервером. Сервер в любую секунду может послать данные о новом сообщении или о том, что кто-то начал печатать.

А PHP-скрипт запускается когда пользователь начинает загружать страничку, и завершает работу когда закончил генерацию странички. Ну если не сделать вменяемого сервера на WebSocket, можно не мечтать что это будет работать также быстро как на вконтакте или одноклассниках. То есть браузер через аякс раз в 10-30 секунд будет отправлять запрос серверу, а не пришли ли новые сообщения. В случае с WebSocket-сервером, у сервера есть возможность отправлять данные браузеру моментально, когда надо.
 
То есть браузер через аякс раз в 10-30 секунд будет отправлять запрос серверу, а не пришли ли новые сообщения.
это уже сделано и вполне устраивает опрос раз в 10 секунд.... интересует именно момент реализации: "Пользователь пишет"...
 
это уже сделано и вполне устраивает опрос раз в 10 секунд.... интересует именно момент реализации: "Пользователь пишет"...
В таком случае следует сделать надпись "пользователь пишет" также, как и новое сообщение. Для этого в скрипт нужно добавить всего-лишь обработчик .on('keypress', function(){ .. });
С клиента отсылающего сообщение, можно отправить частный вид сообщения, например, содержание которого будет "пользователь пишет". На клиенте принимающем сообщение добавить условие
Код:
if(message == 'пользователь пишет') {
  $('#writing').show();
} else {
  $('#messagelog').append(message);
}

Далее, если все устраивает, нужно добавить другой вид частного сообщения "пользователь перестал писать":
Код:
if(message == 'пользователь пишет') {
  $('#writing').show();
} else if(message == 'пользователь перестал писать') {
  $('#writing').hide();
} else {
  $('#messagelog').append(message);
}
Ну а на отправляющей части можно заранее создать setTimeout(), который отсылает сообщение, что пользователь уже ничего не набирает. Если происходит новый набор сообщения, удалить таумаут функцией clearTimeout() и создать новый setTimeout().
 
Назад
Сверху