Решение для COMET и PHP
Есть ли реальное решение для комбинации COMET и PHP? По сути, я дошел до того, что мне нужно периодически обновлять домашнюю страницу пользователя всякий раз, когда в базе данных появляются новые данные. Насколько я понимаю, мне нужно открыть постоянное соединение между моим сервером и браузерами моих клиентов, чтобы обновлять содержимое их домашней страницы, как только появляется новая информация. доступны без выделения большого количества ресурсов, но мне не повезло найти что-то ясное по этому вопросу. Я прочитал много статей о том, что PHP не является хорошим языком для реализации COMET. Мое веб-приложение полностью запрограммировано на PHP, и я не хочу изучать другой язык, но если я вынужден, вы бы предложили хороший язык для начала? Как вы думаете, я могу запрограммировать интерфейс только для решения этой проблемы?
Заранее спасибо.
8 ответов
Я слышал, как люди говорили, что PHP не очень подходит для COMET (как вы сами сказали) из-за того, как работают веб-серверы и PHP - в основном потому, что на страницу приходится один процесс, что означает, что если вы хотите 200 пользователей при подключении к вашему серверу вам понадобится 200 процессов (что может быстро стать проблемой для еще пары сотен пользователей).
Возможно, решением этой проблемы будет использование nginx_http_push_module
?
Я еще не пробовал (пока?), Но это может быть именно то, что нам нужно...
Я работал над школьным проектом и столкнулся с точно такой же проблемой. Поскольку каждый процесс PHP имеет так много накладных расходов памяти, невозможно поддерживать много подключений на блок. Именно в этот момент я решил перейти на использование BOSH и XMPP. Это довольно новая "волна" технологий, но уже есть немало библиотек, которые помогут вам на вашем пути. Я бы предложил использовать Strophe и XMPPHP. Тогда ваши клиенты могут подключиться к серверу BOSH (я использую Openfire), и это может масштабироваться до тысяч активных подключений на сервер.
Вы должны попробовать Realplexor Дмитрия Котерова, который является комет-сервером, который предоставляет Javascript и PHP API.
Readme.txt на английском языке предоставляется в пакете.
Вам не нужно изучать новый язык, чтобы реализовать такую функцию.
Например, вы можете использовать Quercus (Java-реализацию PHP) и реализовать серверное приложение Comet, используя модель управления памятью JVM.
Node.js кажется довольно приятным решением для подобных вещей. (Все еще немного игровой для производства, но все равно круто). PHP - ужасная среда для подобных вещей, вы должны изменить способ взаимодействия сервера с запросами, потому что вы больше не отвечаете немедленно. В Python есть несколько таких серверов, как Twisted, которые отлично подходят для этого, потому что они позволяют вам быть сервером. Неважно, на каком языке вы его пишете, вы должны изменить типичную модель запроса / ответа. (Сервер Grizzly Comet компании Glassfish делает это для Java в качестве примера)
Ajax с длинным опросом - это простое решение, в jquery есть плагины и любые другие основные js-фреймворки, которые помогут вам сделать это.
Есть решения, которые вам нужны:
почти решение COMET (использует php и один файл, написанный на perl): http://translate.google.com/translate?js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&u=http://dklab.ru/ Библиотека /dklab_multiplexor/& сл = RU & TL = еп
Точное решение COMET в php (думаю, именно этого вы и хотите): http://translate.google.com/translate?hl=ru&sl=ru&tl=en&u=http://dklab.ru/lib/dklab_realplexor/
Сначала вам нужно понять, что такое кометное приложение. Концепция, связанная с созданием кометного приложения, объясняется в вики на Comet (программирование).
Что вам нужно понять, так это то, что вы можете использовать любой язык программирования для создания кометного приложения, если оно соответствует принципам, объясненным на вики.
1. Аякс с длинным опросом
2.Streaming
Вы можете проверить пример кода в простом примере кода "Длинный опрос"
Теперь подходит к проблемам -
1.Вы используете длинный опрос ajax, тогда браузер (запрос ajax) будет продолжать опрашивать сервер на предмет данных. Это может потреблять память на сервере или замедлять работу браузера через некоторое время.
Несколько предложений
JQuery PeriodicalUpdater (длинный опрос AJAX / опрос сервера)
Роберт Фишер / JQuery-PeriodicalUpdater
Что нужно проверить, чтобы реализовать это -
а) Как часто вы ожидаете обновления данных на сервере.
б) Сколько времени серверный скрипт будет запускать для проверки, извлечения и обработки данных перед отправкой их на клиентскую сторону.
2.Вы можете реализовать потоковую передачу, используя следующее -
Как реализовать COMET с помощью PHP
Dojo Charting + Lightstreamer Comet Demo
Ajax Push Engine или проект APE
Что нужно для этого проверить -
а) Позволит ли ваш хостинг-провайдер установить их на хостинг-серверах?
б) Использование вашей оперативной памяти и пропускной способности (вам понадобится выделенный сервер с пакетом, который дает вам много оперативной памяти и пропускной способности)
Это зависит от того, что и как ваши требования. Вам придется анализировать и подходить.
Если то, что вы реализуете, является небольшим приложением, вы можете пойти на опрос Ajax Long, учитывая тот факт, что вы проанализировали и обработали недостатки этого подхода.
Если у вас большое приложение, вы можете пойти на пару.