Ка сделать сайт, ожидающий сообщения от сервера?

интернет php AJAX чат

Вопрос звучит довольно странно, типа: "Как сделать из клиента сервер?". Но тем не менее такая задача возникла. Я делаю довольно оригинальный чат, в котором по желанию можно переключаться между обычном способом отправки сообщений и быстрым, когда то, что пишет юзер, отображается в чате в реальном времени, без кнопки "Отправить". Получается такая "бегущая строка", которую по ходу дела можно править и стирать. Если пользователь достиг конца строки, она обрывается многоточием и продолжается с первой пустой строки (ведь пока юзер писал свою строку, под ним начали писать ещё несколько).

Те реализации чатов, которые я видел, мне не подходят - даже те, которые используют AJAX. Всё дело в том, что хотя отправка сообщений на сервер и производится в фоновом режиме, клиент всё равно должен регулярно опрашивать сервер на предмет новых сообщений. И если в обычном чате это можно делать раз в 2 секунды, то в моём - где-то 20 раз в секунду, иначе эффект живого разговора пропадёт. А т.к. этот чат - только часть браузерной игры, то я беспокоюсь за производительность.
Подскажите, можно ли использовать что-либо из этих http://ru.wikipedia.org/wiki/Comet_(программирование) технологий для решения моей задачи.
Ответы:
Во flex есть сокеты. И flex является постоянно запущенным приложением.
Открываете постоянное соединение с сервером и вот оно счастье.
Только на сервере нужен не Apache, который запускает скрпиты по требованию, а настоящий сервер, который умеет держать пул открытых соединений.
Апач может держать соединение сколь угодно долго. Всё дело в константе max_time_limit, которая должна быть равна нулю чтобы выключить овертайм совсем.
Сервер можно организовать на PHP используя socket_create() и socket_listen(). Подробный код с примерами легко найдёте в инетах.
Если скрипт работает бесконечно, то можно использовать писанный на PHP сервер для работы с портом, отличным от 80 (потому что 80й порт биндит апач).
На виртуальных хостингах обычно время работы скриптов ограничено и установить его в 0 не получится. Поэтому для задачи, которую Вы решаете, нужен VPS/VDS-хостинг.
Вот тебе ссылка. Там php, но я слышал, что node.js отлично справляется с подобной задачей (на серверной стороне), чуть ли не лучше чем что-либо (тем более php).
Кроме того, современные браузеры умеют сокет в чистом виде (подумай об этом т.к. указанная ниже реализация по сути костыль появившийся из-за отсутствия сокета).


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.