Реализация PHP-чата на сайте участников - PullRequest
0 голосов
/ 30 марта 2009

У меня есть сайт для членов, на который я бы хотел добавить чат (ЛАМПА на специальном ящике). Он не должен быть слишком сложным, но должен использовать имена пользователей уже зарегистрированных пользователей для чата.

Для меня это немного сторонний проект, поэтому я бы не стал писать его с нуля, если это возможно, и существующий сценарий или класс будут идеальными. Я провел небольшой поиск, и похоже, что есть склонность к JSON / Ajax, но я не могу найти ничего определенного.

Какие-нибудь советы / указатели?

Ответы [ 3 ]

3 голосов
/ 30 марта 2009

Вот два проекта, которые могут вам помочь (оба на основе AJAX / JSON):

  • jQuery Плагин Ajax Chat - простой и легкий плагин для jQuery. Никаких наворотов, но он выполняет свою работу.

  • Ajax IM - полнофункциональное веб-приложение, которое пытается эмулировать все функции, которые можно ожидать от настольного IM-клиента. Довольно большой размер загрузки (сжатый 324 КБ).

В настоящее время я использую первый для базовой системы обмена мгновенными сообщениями в одном из моих проектов. Я смог реализовать это, используя системные учетные данные каждого пользователя (так как они уже вошли в систему - вместо того, чтобы позволить им выбрать свой псевдоним). Пример включает в себя исходный код PHP для скрипта, который опрашивается AJAX. Отлично работает.

2 голосов
/ 30 марта 2009

Существует три подхода к созданию системы чата на основе веб-сайта.

  1. Решение Java-апплета - найдите или создайте Java-апплет, который взаимодействует с сервером чата. Апплет может быть клиентом IRC или заказным клиентом чата с настраиваемым сервером. Я даже видел, как некоторые веб-сайты используют Java-апплет в качестве внешнего интерфейса связи, где весь интерфейс запускается Javascript и HTML в браузере, но Javascript отправляет и принимает события из апплета для запуска чата.

  2. AJAX Post / Poll - Каждый раз, когда пользователь пишет сообщение, отправляйте сообщение на HTTP-сервер, где все подключенные пользователи периодически опрашивают новые сообщения.

  3. Комета - Используя в основном Javascript, каждый клиент устанавливает долговременное соединение с сервером HTTP и бездействует. Когда сообщение отправляется от пользователя, оно отправляется через уже существующее соединение. И вместо того, чтобы опрашивать их, новые сообщения от других пользователей просто передаются по тому же соединению.

Лично я считаю третий вариант самым захватывающим, но также и самым сложным. Вероятно, вам потребуется создать собственную версию HTTP-сервера для поддержки долговременного соединения, которое требуется для Comet. А поскольку для дескрипторов сокетов в TCP / IP существует 16-битное ограничение, вы будете ограничены до 64 КБ сокетов для каждого IP на вашем сервере. (Помните, что каждому клиенту понадобится открытый сокет!) Наконец, методы построения клиентского кода Comet в разных браузерах сильно различаются. Для этого существует несколько фреймворков, но вам придется поддерживать их, пока выходят новые браузеры.

Если у вас небольшой веб-сайт, и вы хотите преодолеть непреодолимую проблему, тогда просто пойдите с опросом AJAX. Это весело, это не так сложно, и вы многому научитесь. Если вы не можете быть обеспокоены, то просто найдите Java-апплет. После того, как он настроен на соответствующий сервер, вам больше не придется беспокоиться о его обслуживании, так как это решение очень независимо от клиента. Конечно, для этого требуется, чтобы на клиенте была установлена ​​среда выполнения Java, и это не всегда будет так ...

1 голос
/ 30 марта 2009

Используйте AJAX для отправки сообщений чата на сервер и периодической загрузки изменений в окно чата (для этого у Prototype есть хорошая функция, которая проверяет наличие обновленных данных на сервере (периодическое обновление ajax)). В соответствии с вашими требованиями "не так уж сложно", это в значительной степени голые кости.

Ах да, и если вы хотите, чтобы сообщения чата были сохранены в базе данных, убедитесь, что уверен , что вы защитите себя от SQL-инъекций.

...