Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2012, 21:45
Интересующийся
Отправить личное сообщение для Dazar Посмотреть профиль Найти все сообщения от Dazar
 
Регистрация: 18.04.2012
Сообщений: 24

Алгоритм работы ajax-mysql чата.
Привет!
Написал код рабочего чата, но при опубликовании в интернете хостинг меня забанил, объяснив это большой нагрузкой на сервер. Помогите найти ошибки в работе.
Весь код выкладывать не буду, не дай Бог вам в нём копаться, напишу лишь алгоритм работы.

На странице мы видим 2 поля(имя, сообщение), кнопку отправить и сами сообщения.
есть два скрипта - добавления сообщения(1) и обновления чата(2).
1) получает из форм данные, добавляет их в бд и сразу же записывает в конец чата.
2)Каждую секунду(может в этом проблема?) обращается к базе данных и выводит все сообщения, начиная с последнего выведенного.

Код есть, но с тонной лишней информации. Если надо, могу скинуть.

Последний раз редактировалось Dazar, 18.04.2012 в 21:55.
Ответить с цитированием
  #2 (permalink)  
Старый 19.04.2012, 12:51
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Dazar Посмотреть сообщение
... хостинг меня забанил, объяснив это большой нагрузкой на сервер.

Каждую секунду(может в этом проблема?) обращается к базе данных...
Так а в чём, собственно, проблема? В том, что хостер забанил? Если Вы не на выделенном сервере, а на каком-нибудь бесплатном хостинге, то практически любой хостер забанит, т.к. Вы формируете каждую секунду запрос на сервер. И это только от одного пользователя. А если их 100? Это получается DDOS-атака на сервер. Кроме того, при большом количестве сообщений в базе данных Вы еще и перегружаете SQL-запросами общий (общественный) MySQL.
Почитайте, что такое polling http://javascript.ru/ajax/comet/polling и comet http://javascript.ru/ajax/comet
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2012, 14:16
Интересующийся
Отправить личное сообщение для Dazar Посмотреть профиль Найти все сообщения от Dazar
 
Регистрация: 18.04.2012
Сообщений: 24

Однако интересно, спасибо за статьи.. Буду читать)
Ответить с цитированием
  #4 (permalink)  
Старый 19.04.2012, 14:16
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

по-моему для этой задачи нет варианта лучше чем связка node.js+socket.io
примеров реализации - уйма. вот например http://habrahabr.ru/post/127525/

кстати, зачем вообще пытаться переплюнуть irc? лучше написать свой веб-клиент.. ну то отдельная тема)
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2012, 13:02
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

у меня тоже была один раз ошибка 503 вроде - сервер перегружен. потом после 2-х часов копания удалось найти бесконечный цикл в коде
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2012, 13:20
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

возможно у тебя та же петрушка. За секунду сервер не успевает обработать запрос и думает что идет бесконечный цикл, может стоит что-то подкрутить, чтобы ускорить процесс выборки и передачи данных. Но это чисто мое некомпетентное мнение в этом вопросе
Ответить с цитированием
  #7 (permalink)  
Старый 20.04.2012, 13:36
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от vuler Посмотреть сообщение
За секунду сервер не успевает обработать запрос и думает что идет бесконечный цикл
Глупо надеяться, что сервер обязан обработать запрос за одну секунду. По разным причинам этот процесс может растянуться и на 10 секунд... Поэтому очередной запрос с клиента надо слать на сервер только после ответа сервера на предыдущий запрос. При отправке запроса устанавливать время таймаута неответа сервера (например, 30 сек.). Если сервер не ответил за время таймаута, или ответил вовремя - только тогда посылать очередной запрос.
Ответить с цитированием
  #8 (permalink)  
Старый 20.04.2012, 14:43
Интересующийся
Отправить личное сообщение для Dazar Посмотреть профиль Найти все сообщения от Dazar
 
Регистрация: 18.04.2012
Сообщений: 24

Сообщение от Маэстро Посмотреть сообщение
Глупо надеяться, что сервер обязан обработать запрос за одну секунду. По разным причинам этот процесс может растянуться и на 10 секунд... Поэтому очередной запрос с клиента надо слать на сервер только после ответа сервера на предыдущий запрос. При отправке запроса устанавливать время таймаута неответа сервера (например, 30 сек.). Если сервер не ответил за время таймаута, или ответил вовремя - только тогда посылать очередной запрос.
А вот это очень интересная мысль.. Может стоит как раз так и сделать, при этом проблема решится?
Ответить с цитированием
  #9 (permalink)  
Старый 20.04.2012, 18:20
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Да Маэстро умну вещь предложил я бы это сделал через jquery и отсылал запрос с помощью $.ajax. только когда прийдет success
$.ajax({
				type: 'POST',
				url: '../module/get_message.php',
				data: {""},
                                beforeSend: function()
				{
				can_send_new_ajax="false";
				},
				success: function(data)
				{
                                 ..
				can_send_new_ajax="true";
				}
			   });
Ответить с цитированием
  #10 (permalink)  
Старый 20.04.2012, 20:40
Интересующийся
Отправить личное сообщение для Dazar Посмотреть профиль Найти все сообщения от Dazar
 
Регистрация: 18.04.2012
Сообщений: 24

Прочитал статью про COMET..
Уважаемые, можете хотя бы на словах рассказать, как реализовать длинные запросы?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задание на вечер (js + ajax + mysql) kazankoff Работа 6 21.04.2012 21:20
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Разница работы кода c ajax и просто текстом? 0931454574 AJAX и COMET 2 07.04.2011 17:31
Скрипт ajax чата seoabcd Общие вопросы Javascript 2 20.02.2011 18:39
вывод таблички из mysql в ajax alexandre AJAX и COMET 40 18.08.2009 11:46