Каков эффективный способ работы с окном чата JS?

#javascript #performance #chat #chatroom

#javascript #Производительность #Чат #комната чата

Вопрос:

Допустим, я хочу написать окно чата AJAX, что-нибудь простое, я пишу некоторый текст, и он публикуется. Давайте даже не будем слишком беспокоиться об именах пользователей в окне.

Первые инстинкты подсказывают мне просто написать таблицу и размещать в ней данные, и запрашивать каждые несколько секунд.

Давайте представим, что сейчас не 2011 год, компьютеры дешевые, и нас устраивают медленные, зависающие окна чата, которые обновляются каждые 5 секунд, или замедляют работу всего сервера из-за шторма SQL.

Какие есть альтернативы? Могу ли я что-то сделать с XMPP? Что, если бы у меня не было ничего, кроме моего любимого серверного языка (и немного SQL)? Могу ли я использовать хэши сообщений каким-нибудь аккуратным способом? Что я могу сделать, чтобы ограничить количество запросов?

То, что я ищу, — это отличный план написания программного обеспечения для веб-чата, которое было бы очень ресурсоэффективным и гибким. Я уверен, что мы делаем что-то полезное здесь, на SO, для тех комнат чата, которые у нас уже есть.

Комментарии:

1. Извините, что беспокою вас, но при проверке чата здесь вы видите, что XHRS отключается примерно каждую секунду.

2. О, я понимаю это, возможно, я не совсем ясно выражаюсь. Я просто ищу хороший стандартный шаблон для этого, который не выбирает все записи из таблицы и не удаляет их каждые 1 секунду. Хороший способ добиться наилучшего эффекта от этих временных интервалов, которые длятся каждую секунду.

3. Хм, конечно, это не выбор каждой записи. Вы выбираете только те, которые были опубликованы между предыдущим запросом и текущим.

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

Ответ №1:

Ваша проблема в том, что вы время от времени проводите опрос. Что вам действительно нужно, так это постоянное соединение для потоковой передачи данных.

Вы могли бы попробовать использовать метод Comet — потоковое соединение, которое вы можете поддерживать открытым для отправки сообщений чата вниз.

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