Пишу корпоративную страничку для сайта одной конторы. В числе функций предусмотрена стандартная возможность обмена личными сообщениями между пользователями. Для получения лички, находясь в режиме "онлайн", можно конечно в соответствующем окне задать параметр "refresh" с определенным интервалом (как в чатах), но недавно заметил примерчик куда лучше. Наверное многие когда-нибудь пользовались службой знакомств "Mail.Ru". Так вот там при обмене сообщениями между пользователями появляется всплывающее окно, в котором и происходит непосредственно "приватный чат" с собеседником. Само окно создать не проблема - обычный Java-скрипт, куда более интересна другая функция - в данном окне нет никакого "refresh'a", который вызывается с постоянным интервалом. Как только тебе твой собеседник отправляет сообщение, то у тебя обновляется окно и появляется новое сообщение. Т.е. нет надобности постоянно стучать по F5 (фу, какое извращение =) ) и не наблюдается "чатовского" моргания экрана, т.к. он обновляется только когда поступает новое сообщение. Все никак не могу понять как же реализуется этот механизм? Может кто подскажет?
Подскажет щелчок правой кнопкой мыши по этому окну и выбор пункта "Просмотр исходного кода". А вообще ищи в гугле по слову "ajax".
кроме идей AJAX есть еще один метод: соединение с клиентом не закрывается, через страницу передаются данные так Код (Text): <script>w('user message')</script> минуса 2: - большая нагрузка на сервер - в клиенте постоянное состояние загрузки
Ti, но свои сообщения тоже отправлять как-то надо. Так же браузеру может надоесть это и он порвет соединение. Поэтому периодически нужно скармливать ему какие-то данные.
Ti я как раз-таки в самом начале про рефреш с таймаутом и говорил, его то все знают как делать, банальный способ, а спросил я именно про другое.
Sleven, 1. Можно рефреш в скрытом ифрейме, тогда моргать не будет. А там на js вставлять нужные сообщения в родительское окно. 2.
X-Cray уже давно посмотрел. Просто думал может кто-то еще знает схему работы серверного скрипта. Кстати, по AJAX нашел интересные доки, правда почти все на английском. По переводил тут, если интересно, читайте: http://www.ideasurgut.ru/ajax_with_source.zip А вот исходники JavaScript Mail.Ru: http://www.ideasurgut.ru/java_mail.zip
Пока тока в этом примере AJAX не научился возвращать в JavaScript русский текст, он его вопросами отображает %)
честно говоря, до того как узнал об AJAX, глядя на систему сообщений Mail.Ru, думал, что уже научились делать веб-формы, подобные сетевым программам в Windows - т.е. прога сидит себе, ничего не делает, только "слушает определенный порт" и ждет когда на него прийдет нужное ей сообщение, потом уже что-то делает. Оказалось, что до такого все-таки еще не дошли, и приходится вызывать скрипт в ответ на какое-то действие пользователя.....жаль...
Сам механизм (отвечая на первое сообщение) можешь реализовать следующим образом: 1. если один пользователь отправляет другому сообщение (естественно, самостоятельно открывая окошко чата и вбивая сообщение), оно кладется в базу в таблицу "inbox" (входящие) с пометкой ID получателя и отправителя (ну, и там время/цвет по вкусу) 2. у всех пользователей на странице работает скрипт, который читает AJAX-ом скрипт check_mail.php каждые 2-5 секунд. 3. check_mail.php получает ID обратившегося пользователя (ну, тут надо над безопасностью авторизации поработать, чтоб никто другой не мог обращаться с чужим ID) и проверяет в базе наличие для него сообщений, выдавая их на экран (print, echo) в готовом для чтения формате 4. скрипт AJAX-а, получая положительный ответ от chek_mail.php(строку сообщения), обрабатывает данные, узнавая из них ID отправителя, и открывает окошко чата с отправителем (если оно уже не открыто), вставляя в конец строку полученного сообщения. 5. получатель и отправитель меняются местами.
X-Cray обалдеть, один-в-один рассказал как у меня сделано, серьезно тока вот одна проблема - русский текст который получил JavaScript в ответ (сообщение) и вставил в окно, отображается знаками вопроса.... %)
Значит, это самый простой и очевидный способ А насчет русских букв: - открой в браузере "check_mail" и посмотри, а там не знаки вопросов случаем? - если да - ошибка при добавлении в базу или считывании - проследи, в какой кодировке выдает php-скрипт ответ, совпадает ли она с чатовской - попробуй encode() на URL AJAX-запросов наслать
А еще лучше — делать все в utf. Сценарии, данные в базе, html-страницы и т.п. Тогда таких проблем не будет.
X-Cray в check_mail.php - нет, не вопросы, база нормально все выдает, но не в utf, как советует vasa_c, а в cp1251_general_ci - привык я с такой кодировкой всегда работать. - php-скрипт отдает ответ xml-документом, заголовок такой (может в нем проблема): Код (Text): <?xml version=\"1.0\" encoding=\"windows-1251\" standalone=\"yes\"?>"; ?> <response> <method>getMessage</method> <result><?php echo nameInUse($_GET['q']) ?></result> </response>