из этого мира программирование кометы и веб-чат - PullRequest
12 голосов
/ 09 июля 2010

Текущая настройка проекта

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

setTimeout(function() { listenForIncomingChat() }, 500);
setTimeout(function() { checkForIncomingMessages( ...params... ) }, 500);

... таким образом, setTimeout() гарантирует, что эти функции всегда работают. В зависимости от того, сколько окон чата у меня открыто, консоль Firebug может сойти с ума с POST s на сервере:)

Очевидно, что это действительно неэффективно, но это единственный способ, которым я мог заставить вещи работать. Сейчас я ищу способы сделать это лучше, сделать это правильно!

Некоторые исследования

Теперь я слышал о Программирование Comet и о том, что это способ открыть долгоживущее HTTP-соединение с сервером, но я не знаком с технологией или идеями Comet. WebSockets для HTML5, вероятно, даже лучше, но, поскольку это не идет полным ходом и не поддерживается всеми браузерами, я остановлюсь на том, что работает.

Согласно Википедии, существует несколько способов разработки с использованием стиля Comet: потоковая передача (скрытый iFrame, XMLHttpRequest) или AJAX с длительным опросом (XMLHttpRequest, тег Script). Однако я ничего не знаю об этом. Я также читал о AJAX Push Engine (APE) , и он выглядит круто, но я пока не хочу использовать стороннюю версию.

Я недавно наткнулся на WebChat 2.0 , поэтому я собираюсь просмотреть исходный код, чтобы попытаться понять, как все это работает.

На вопрос (ы)

Так, где я могу найти примеры кода / учебные пособия о том, как начать работу с такого рода проектом? Как бы я внедрил технику кометы? Как настроить долговременное HTTP-соединение с сервером?

1 Ответ

9 голосов
/ 09 июля 2010

Вот пример чата с использованием node.js, исходный код здесь .

Я полагаю, что клиент использует опрос, но этот пример интересен, потому что сторона сервера также находится в JS, и node.js эффективен для такого типа вещей.

...