За последние 24 часа нас посетили 22884 программиста и 1243 робота. Сейчас ищут 722 программиста ...

Чат php, сокеты

Тема в разделе "Прочие вопросы по PHP", создана пользователем bitrop, 18 мар 2011.

  1. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    Всем привет!

    Есть чат. Написан на php+mysql+ajax

    Но вот скорость работы не устраивает (((


    Знаю некоторые чаты работают на основе сокетов.

    С чего начать, что посоветуете ?

    P.S. пожалуйста по сути, ответы по типу "гугли" прошу не оставлять!

    Заранее благодарен.
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    посоветую phpdaemon фреймворк или другой язык программирования
     
  3. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    а подробнее можно?
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  5. Villan

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

    С нами с:
    13 апр 2011
    Сообщения:
    36
    Симпатии:
    0
    Я бы посоветовал забыть чаты на сокетах - этот приём "из другого мира", не HTTP-шного.

    И написать свой чат - используя возможности JavaScript - причём AJAX реализовывать не на основе jQuery - а используя старый добрый DOM 2.

    Обновляете один из фреймов с какой-то периодичностью, вылавливая новые сообщения - и средствами DOM 2 записываешь их в окно сообщений.

    И тут, кстати, нужно не забывать чистить таблицу сообщений. Может, кстати, она и тормозила, забитая сообщениями.
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    bitrop
    http не подразумевает иной системы кроме как запрос-ответ... к сожалению. если бы был способ с сервера обращаться к клиенту по собственной инициативе - было бы проще жить конечно =)
     
  7. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    Ну оно то да...
    ну надо ж выходить из того, что есть....
    вот чат на сокетах даже если сделать , проблемы с поиском хостинга, в итоге можно найти но дорого....

    а по поводу чистить базу сообщений, так я имел ввиду скорость работы не самой базы или сервака, а что обновляю окно аяксом каждых 4 секунды.... тобишь если отправляешь месагу на первой секунде , то в итоге ждем 3....

    1 секунду же не поставишь, сервак с ума сойдет....да и хостеры пошлют...


    Да и вообще на основе ajax оно потянет много клиентов ? ну допустим 100....мне кажется врятли (
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Смотря как вытягивать/сохранять новые сообщения средствами php. ajax тут ни при чём. 100 запросов в четые секунды не должны напрягать сервер, да и в 1 секунду.
     
  9. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    да как как...обычно....
    проверяется наличие новых месаг...как только появляется сразу ajax ом добавляется в конец окна вывода...

    аякс не при чем это понятно, я в общем имел ввиду ...что не на сокетах, а на phph+mysql+ajax ну что бы не писать связку полностью.....а что там пхп и мускл то само собой
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Писал на файлах, бд только для регистрации/входа/получения инфы.
    Люди пишут сообщения реже, чем нужно обновлять экран. Следовательно, нужно в момент отправки "приготовить" новые сообщения для конкретного юзера, чтобы он максимально быстро их считал. У каждого юзера свой файл из приходящих сообщений. Браузер запросил новые сообщения, получает их быстро, потом unlink файла или затирание. Считываение и выдача сообщений занимает где-то 0.0002-0.0004 секунды. Unlink не знаю, сколько, не проверял, чуть подольше.
    Если подключаться к бд то будет прибавляться "лишние" 0.0030 секунды.

    PS. Причем эти 0.0030-0.0050 только на подключение. Сколько займет поиск новых сообщений, зависит от количества записей.
     
  11. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    да не файлы не выход (
     
  12. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    так поиск идет просто...запоминает макс айди, как только появляется больше id сразу вывод
     
  13. Villan

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

    С нами с:
    13 апр 2011
    Сообщения:
    36
    Симпатии:
    0
    Тогда я сниму шляпу перед Вам -- потому что на данный момент думаю, что это в принципе невозможно.

    Потому что, как отмечалось ранее, сервер может послать сообщение клиенту только в ответ на запрос этого клиента - после чего сокет ЗАКРЫВАЕТСЯ.

    Это Вы ждёте свою мессагу 3 секунды. Остальные ждут меньше.

    Всё зависит от того, как Вы реализуете AJAX. Это же не технология - это концепция.

    P.S. А что, у Вас такой оживлённый чат?
     
  14. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Проблема решается элементарно. Пишется CGI Initor, который обращается к демону (в свою очередь тоже вполне может быть cgi). Демон ессно, существует в 1 экземпляре и содержит в себе менеджер сокетов. Остальное - дело техники. Так как демон - это не php-скрипт, а C/C++, к примеру, то он может поддерживать сокеты живыми столько, сколько от него требуется. А сам CGI Initor использовать в прямом вызове из php, передавая через параметры всю нужную информацию для управления демоном или своим сокетом. Вуаля, у вас есть статические сокеты под php.
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    bitrop
    тобишь если отправляешь месагу на первой секунде , то в итоге ждем 3....
    ты доработай скрипт, чтобы при отправке мессаги, он сразу и заберал в ответе новые сообщения =)

    или ну поставь две секунды...
     
  16. Villan

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

    С нами с:
    13 апр 2011
    Сообщения:
    36
    Симпатии:
    0
    Ну вот я загрузил страницу чата - и, положим, сокет остался. Но как этот сокет заставит обновиться страницу в браузере - вот что мне непонятно. Браузер же получил ответ на свой запрос и больше ничего не ждёт.
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    titch
    а клиент как с ними работает?
     
  18. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
  19. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
  20. Villan

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

    С нами с:
    13 апр 2011
    Сообщения:
    36
    Симпатии:
    0
    Мозилла, значит, начиная с 4-й версии поддерживает.
    Неудивительно, что я упустил это новшество...

    Тут я по граблям не ходил, одно уверенно скажу: с использованием WebSocket нужно подождать хотя бы полгодика. Пусть все обновятся.
     
  21. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Проблема с долгосрочным внедрением ВебСокет куда более серьезная. Из-за уязвимости в системе безопасности производители браузеров отказались от их полной поддержки, пока уязвимость не будет устранена. В случае чата ВС вполне можно использовать - даже если кому-то подменят мессагу, я не думаю, что вас кто-либо засудит. Подавляющее большинство пользователей чатов - это розовые девочки, а сознательные граждане деловые переговоры там не ведут.
     
  22. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    как это невозможно ? да таких чатов немерянно!
     
  23. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    на глазок определил?...
     
  24. bitrop

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

    С нами с:
    18 мар 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Киев
    нет был админом, модером
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    bitrop
    есть способы эмулировать все это дело.

    вопрос в чем? 4 секунды много? поставь 1 =) че ты мучаешься?