За последние 24 часа нас посетили 17260 программистов и 1627 роботов. Сейчас ищут 1473 программиста ...

Корпоративка

Тема в разделе "Прочие вопросы по PHP", создана пользователем Sleven, 19 июл 2006.

  1. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    Пишу корпоративную страничку для сайта одной конторы. В числе функций предусмотрена стандартная возможность обмена личными сообщениями между пользователями.
    Для получения лички, находясь в режиме "онлайн", можно конечно в соответствующем окне задать параметр "refresh" с определенным интервалом (как в чатах), но недавно заметил примерчик куда лучше. Наверное многие когда-нибудь пользовались службой знакомств "Mail.Ru". Так вот там при обмене сообщениями между пользователями появляется всплывающее окно, в котором и происходит непосредственно "приватный чат" с собеседником. Само окно создать не проблема - обычный Java-скрипт, куда более интересна другая функция - в данном окне нет никакого "refresh'a", который вызывается с постоянным интервалом. Как только тебе твой собеседник отправляет сообщение, то у тебя обновляется окно и появляется новое сообщение. Т.е. нет надобности постоянно стучать по F5 (фу, какое извращение =) ) и не наблюдается "чатовского" моргания экрана, т.к. он обновляется только когда поступает новое сообщение.
    Все никак не могу понять как же реализуется этот механизм? Может кто подскажет?
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Подскажет щелчок правой кнопкой мыши по этому окну и выбор пункта "Просмотр исходного кода".

    А вообще ищи в гугле по слову "ajax".
     
  3. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    кроме идей AJAX есть еще один метод:

    соединение с клиентом не закрывается, через страницу передаются данные так
    Код (Text):
    1. <script>w('user message')</script>
    минуса 2:
    - большая нагрузка на сервер
    - в клиенте постоянное состояние загрузки
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Ti, но свои сообщения тоже отправлять как-то надо.

    Так же браузеру может надоесть это и он порвет соединение. Поэтому периодически нужно скармливать ему какие-то данные.
     
  5. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    таймаут на клиенте выставить на рефреш, раз в минуту вполне хватит;
    отправлять стандартно формой
     
  6. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    между тем этот способ гараздо быстрее и экономичнее, для чатов самое оно
     
  7. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    Ti я как раз-таки в самом начале про рефреш с таймаутом и говорил, его то все знают как делать, банальный способ, а спросил я именно про другое.
     
  8. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Sleven,

    1. Можно рефреш в скрытом ифрейме, тогда моргать не будет. А там на js вставлять нужные сообщения в родительское окно.
    2.
     
  9. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Хех.. а не пробовал просто посмотреть javascript коды на этом @Mail.ru ?)
     
  10. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    X-Cray уже давно посмотрел. Просто думал может кто-то еще знает схему работы серверного скрипта.
    Кстати, по AJAX нашел интересные доки, правда почти все на английском. По переводил тут, если интересно, читайте:
    http://www.ideasurgut.ru/ajax_with_source.zip

    А вот исходники JavaScript Mail.Ru:
    http://www.ideasurgut.ru/java_mail.zip
     
  11. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    Пока тока в этом примере AJAX не научился возвращать в JavaScript русский текст, он его вопросами отображает %)
     
  12. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    честно говоря, до того как узнал об AJAX, глядя на систему сообщений Mail.Ru, думал, что уже научились делать веб-формы, подобные сетевым программам в Windows - т.е. прога сидит себе, ничего не делает, только "слушает определенный порт" и ждет когда на него прийдет нужное ей сообщение, потом уже что-то делает.
    Оказалось, что до такого все-таки еще не дошли, и приходится вызывать скрипт в ответ на какое-то действие пользователя.....жаль...
     
  13. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Сам механизм (отвечая на первое сообщение) можешь реализовать следующим образом:

    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. получатель и отправитель меняются местами.
     
  14. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    X-Cray обалдеть, один-в-один рассказал как у меня сделано, серьезно :) тока вот одна проблема - русский текст который получил JavaScript в ответ (сообщение) и вставил в окно, отображается знаками вопроса.... %)
     
  15. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Значит, это самый простой и очевидный способ :)

    А насчет русских букв:
    - открой в браузере "check_mail" и посмотри, а там не знаки вопросов случаем?
    - если да - ошибка при добавлении в базу или считывании
    - проследи, в какой кодировке выдает php-скрипт ответ, совпадает ли она с чатовской
    - попробуй encode() на URL AJAX-запросов наслать
     
  16. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    А еще лучше — делать все в utf.
    Сценарии, данные в базе, html-страницы и т.п.
    Тогда таких проблем не будет.
     
  17. Sleven

    Sleven Активный пользователь

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    X-Cray в check_mail.php - нет, не вопросы, база нормально все выдает, но не в utf, как советует vasa_c, а в cp1251_general_ci - привык я с такой кодировкой всегда работать.
    - php-скрипт отдает ответ xml-документом, заголовок такой (может в нем проблема):
    Код (Text):
    1. <?xml version=\"1.0\" encoding=\"windows-1251\" standalone=\"yes\"?>"; ?>
    2. <response>
    3.  <method>getMessage</method>
    4.  <result><?php echo nameInUse($_GET['q']) ?></result>
    5. </response>
     
  18. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    А javascript как ответ обрабатывает? (код от момента считывания из php до вставки в окошко)