Реализация PHP-чата на сайте участников

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

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

Любые советы / указатели?

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

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

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

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

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

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

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

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

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

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

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

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