2013-04-10 2 views
1

Я использую чат в системе, в которой приняли участие около 100 активных пользователей. Чат построен с javascript, который каждые четыре секунды запускает ajax-запрос на php-скрипт, который извлекает данные из базы данных. Сервер становится очень медленным, когда на сервере работает около 100 пользователей.Чат сердцебиение замедляет работу сервера

Есть ли лучший способ создать чат, чем использовать интервалы javascript, содержащие вопросы ajax?

Сердечные приветы /H

+3

25 запросов не так много. Вы кешируете ответы на запрос AJAX, а не нажимаете на базу данных каждый раз? Даже попадание в базу данных не должно быть огромным издержками. Это сервер с очень низким уровнем производительности? В противном случае это просто говорит о том, что некоторые разработки на стороне сервера очень медленные. –

+0

У вас есть все, что связано с веб-сокетами/обратными ajax? Я никогда не создавал чат-клиент, но мне интересно, может быть, нужно как можно более толкать, а не постоянный опрос. –

+0

Мы модернизируем наш сервер atm, поэтому посмотрим, будет ли это иметь какое-либо значение. Я думал о сетевых розетках. Знаете ли вы хороший учебник по использованию веб-сокетов? – hgerdin

ответ

1

Это проблема использования однонаправленного запроса: клиент должен запросить сервер постоянно, чтобы увидеть, если есть какая-то новая информация. В результате он добавляет некоторую плату за сервер. См. Polling на wiki.

Решение состоит в использовании системы двунаправленного запроса. Это позволит серверу отправлять данные клиенту самостоятельно, а не просто ждать ответа входящего запроса. Это приведет к удалению принципа опроса и некоторого заряда с сервера.

Я вижу три решения для этого:

  • апплет Java
  • флэш-приложение
  • заменить АЯКС запрос с соединением WebSocket

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

1

Использование таймаута для связи ajax, вероятно, является наихудшим решением, которое вы можете сделать.

Предлагаю вам использовать Websockets или AJAX Longpolling. Существует плагин jquery, который работает с websockets (с грациозным ухудшением). Возможно, вам даже захочется попробовать socket.io, который объединяет все это в аккуратную структуру (node.js serverside).

This answer дает вам некоторую информацию о том, как, возможно, достичь этого, имея PHP на сервере.

Смежные вопросы