![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 02.01.2014
Сообщений: 369
|
![]()
Доброго времени суток !
решил написать свой простенький чат так сказать потренироваться конечно же пишу на php и тут появился вопрос вот какого плана как сделать что бы сообщения появлялись сразу после отправки у всех кто находится в чате ... и нашел вот какое решение Long polling и после того как я все смог прикрутить к своему чату появился один маленький но серьезный вопрос а не будет ли грузить сервер этот чудо ... Выкладываю оригиналы того что я нашел ... ajax.php PHP код:
"Я не волшебник, я только учусь"
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.01.2014
Сообщений: 369
|
![]()
Все не поместилось за один раз вот второй файл
index.html Код HTML:
<script src="jquery.min.js"></script> <script> /* Для статьи http://codediscuss.ru/blogs/14-ajax-chat-na-php-i-mysql */ $(function(){ var chat = $('#chat')[0]; // Окно чата var form = $('#chat-form')[0]; // форма var xhr; // запрос // вешаем обработчик на отправку формы $('#chat-form').submit(function(event){ // поле ввода var text = $(form).find('input[type="text"]'); // выключаем форму пока не пришел ответ $(form).find('input').attr("disabled", true); // отправка сообщения update(text); // что бы форма не перезагружала страницу return false; }); function update(text) { // что шлём var send_data = { last_id: $(chat).attr('data-last-id') }; if (text) send_data.text = $(text).val(); if (xhr) { xhr.abort(); } // шлём запрос xhr = $.post( 'ajax.php', send_data, // отдаём скрипту данные function (data) { // ссылка пришла? if (data && $.isArray(data)) { $(data).each(function (k) { // формируем наше сообщение var msg = $('<div>' + data[k].created + ': ' + data[k].text + '</div>'); // и цепляем его к чату $(chat).append(msg); // если ласт ид меньше пришедшего if (parseInt($(chat).attr('data-last-id')) < data[k].id) // запоминаем новый ласт ид $(chat).attr('data-last-id', data[k].id); }); // если это отправка, то при получении ответа, включаем форму if (text) { // вклчюаем форму $(form).find('input').attr("disabled", false); // и очищаем текст $(text).val(''); } // прокрутка $(chat).scrollTop(chat.scrollHeight); // зацикливаем вызов обновления update(); } }, 'JSON' // полученные данные рассматривать как JSON объект ); } // что бы при загрузке получить данные в чат, вызываем сразу апдейт update(); }); </script> <style> #chat { overflow-x: scroll; height: 200px; } </style> <div id="chat" data-last-id="0"></div> <form id="chat-form"> <input type="text" id="chat-msg"/> <input type="submit" value="написать"/> </form>
"Я не волшебник, я только учусь"
|
![]() |
![]() |
![]() |
#3 |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
![]()
Много расписывать не буду.. но скажу в общих чертах
1. почитайте про comet и статейку на хабре вам нашел Вообще на самом деле вопросы рейл - тайма это не тривиальные вопросы. я глубоко занимался этой темой по необходимости, поэтому если вы всерьез озабочены этой темой вам лучше уйти в сторону nodejs с его прекрасным socket.io либо можно уйти в сторону python с его связкой tornado+socket.io опять так же. я применял эти технологии в продакшене поэтому пишу по опыту. при тестировании простой сервер выдерживал до 300 тыс соединений без последствий, дальше не хватало памяти, был серьезный подход со стороны настройки nginx. что касается Long poll и т.д считаю не серьезным подходом. да и сам инструмент язык php не располагает решать эту задачу как выше описанные инструменты. знаете под каждую задачу идет свой инструмент. это как раз тот случай Но вы не расстраивайтесь. если вам все же очень хочется чата сделайте псевдо-рейл тайм. к примеру централизованный скрипт раз в 5 сек выполняет запрос к базе (запрос самый простой select count(id) from msg id индекс) получили число запомнили если в следующий раз число отличается делайте еще один запрос на выборку сообщений и результат записывайте в div вашего чата. Будут вопросы пишите.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Последний раз редактировалось Stanislav; 27.03.2015 в 21:47. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод отладочных сообщений | Sam Gold | Win Api | 6 | 19.02.2012 16:11 |
Вывод новых сообщений цикла с верху. | Андрейкин | PHP | 5 | 28.08.2010 19:23 |
Вывод сообщений\уведомлений\ошибок на экран | Pirotexnik | Общие вопросы C/C++ | 8 | 03.06.2010 10:39 |
вывод сообщений из Unit2 в Unit1 ListBox1 | fize | Помощь студентам | 4 | 12.12.2009 17:35 |
Вывод сообщений в Билдере | Lanist | Общие вопросы C/C++ | 1 | 21.07.2008 10:05 |