За последние 24 часа нас посетили 55798 программистов и 1796 роботов. Сейчас ищут 882 программиста ...

Мини-чат простой. Правильный подход? :)

Тема в разделе "PHP для новичков", создана пользователем Invision, 9 мар 2011.

  1. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вообщем для себя пишу простой мини-чат на php & jquery (ajax)

    Первое что пришло на ум получать содержимое:

    [js] function show()
    {
    $.ajax({
    url: "chat.php",
    cache: false,
    success: function(html){
    $("#chat").html(html);
    }
    });
    }

    $(document).ready(function(){
    show();
    setInterval('show()',1000);
    });[/js]

    В файле chat.php выводится через

    PHP:
    1. while ($row = mysql_fetch_row($result))
    2. { ... }
    Теперь думая насчет нагрузки.. Каждую секунду он берет те же данные. Как вы думаете, будет лучше сделать проверку "новых" сообщений и если есть обновлять или разница несущественная и нет смысла?
     
  2. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Если забирать каждый раз всю хисторь чата то будет конечно по 10-30 мб трафика в час.
    В идеале сервак отдает только те сообщения, которые появились момента последнего пинга
     
  3. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    эм ну тогда это хреново =( как до этого дойти? :)
     
  4. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Для этого есть очереди сообщений.
     
  5. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    есть примеры?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Invision
    блин чувак, самое время принять решение кушать рыбу. =) такие вопросы, что просто пипец.

    Что ты хочешь тут понять? что тебе не понятно? что чтобы ЗНАТЬ ВРЕМЯ нужно ЗНАТЬ ВРЕМЯ? в чем затык? тебе сказали: слать все скопом каждый раз - маразм. Вывод: слать порциями. Опрашивать сервак раз в секунду. Это сложно? что тут непонятного? Где хранить время? где хочешь, там и храни. В сессии, в самом опрашивающем ява-скрипте. Где угодно. На сервере. На клиенте. В куках. В хидден инпуте. На стене мелом. В календаре маркером. Какой тут нахрен пример еще? =)
     
  7. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    ты так легко это все говоришь, однако я просто не могу догнать править сам код или jquery запрос...

    Я не понимаю как доставать порциями, знаю что есть while :D

    В принципе то что задумывал написал, смайлы есть, к сессии подрубил, приватные сообщения есть, но вот с этой херью.. :D Ладно соре за мой тупизм, но никогда с этим не сталкивался)
     
  8. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    честно не знаю как мне выводить очередь и юзать минимум запросов :D вот так :(

    я вообще представлял это так:
    проверить поступили ли новые сообщения, если да то обновить содержимое.. Но по всей видимости это слишком тупо =)
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    d бд пиши сообщение И ДАТУ

    в запросе с клиента говори дату последнего запроса.или последнего полученного сообщения. что? =)
     
  10. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    а я ясно, вот только можно
    а на примере можно показать как будет выглядеть :D аха соре я не могу расписать правильно, хрень получается =)

    дату последнего сообщения получить проблем нет, но от клиента последний запрос... =))

    ---
    p.s в бд хранится время формата time (h.i.s)

    К примеру вывожу в переменную из бд $lasttime и от клиента запрос $nowtime = date('H:i:s');
    догнать не могу правда... ставить интервал проверки сообщений (т.е между ними сколько разница и если около пару сек то обновить содержимое)... видать я не в ударе сегодня
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Правильный подход демона написать
     
  12. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    ага, и волшебный знак >=

    ))
     
  13. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    p.s я выше подправил вопрос ;D
     
  14. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    у человека есть время последнего запроса. У сообщения есть время.

    Возвращаем те сообщения, у которых дата >= его последнего посещения
     
  15. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    а что если я хочу один раз для этого человека загрузить последние 20 сообщений, ведь при вашем условии если я войду в чат сообщений (последних) не будет... Принцип ведь не меняется также будет из while постоянно обновляться одно и тоже только запрос меньше затрат потратит :D блин я тупой. =))))))
     
  16. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    блян, кажется я допер :D а вот с последними масагами неочень, но в целом спасибо мысль я уловил..
     
  17. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Блин у меня проблема возникла, делаю по этой схеме но видимо сам js криво написан, т.к он тупо обновляет содержимое, а нужно чтобы добавлял только новое. получается что при обновлении новое выводится старое стирается.

    Работает по такой схеме:

    [js] function show()
    {
    $.ajax({
    url: "chat.php",
    cache: false,
    success: function(html){
    $("#chat").html(html);
    }
    });
    }

    $(document).ready(function(){
    show();
    setInterval('show()',2000);
    });[/js]
    ведь можно в div chat просто добавлять новое а не полностью обновлять содержимое div chat ?
     
  18. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    $("#chat").append(html);

    вроде так
     
  19. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    спасиб)
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) надо тебе в лес на шашлыки
     
  21. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    igordata

    Я бы лучше свиной шашлык поел, чем из Invisionа ))))
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    еще чуть-чуть и сырым съем

    хотя он конечно молодец, старается.