решение для COMET и PHP - PullRequest
       36

решение для COMET и PHP

5 голосов
/ 25 декабря 2009

Есть ли реальное решение для комбинации COMET и PHP? По сути, я пришел к выводу, что мне нужно периодически обновлять домашнюю страницу пользователя всякий раз, когда в базе данных появляются новые данные. Насколько я понимаю, мне нужно открыть постоянное соединение между моим сервером и клиентскими браузерами, чтобы обновлять содержимое их домашней страницы, как только появляется новая информация. доступны без выделения большого количества ресурсов, но мне не повезло найти что-то ясное по этому вопросу. Я прочитал много статей о том, что PHP не является хорошим языком для реализации COMET. Мое веб-приложение полностью запрограммировано на PHP, и я не хочу изучать другой язык, но если я вынужден, вы бы предложили хороший язык для начала? Как вы думаете, я могу запрограммировать интерфейс только для решения этой проблемы?

Заранее спасибо.

Ответы [ 8 ]

2 голосов
/ 25 декабря 2009

Раз я слышал, что люди говорили, что PHP не очень подходит для COMET (как вы сами сказали) из-за того, как работают веб-серверы и PHP - в основном потому, что на каждый процесс приходится один процессстраница, что означает, что если вы хотите, чтобы к вашему серверу было подключено 200 пользователей, вам потребуется 200 процессов (что может быстро стать проблемой для еще пары сотен пользователей) .

Может бытьРешением этой проблемы было бы использование nginx_http_push_module?

Я еще не пробовал (пока?) , но это может быть именно то, что нам нужно...

1 голос
/ 20 марта 2010

Я работал над школьным проектом и столкнулся с точно такой же проблемой. Поскольку каждый процесс PHP имеет так много накладных расходов памяти, невозможно поддерживать много подключений на блок. Именно в этот момент я решил перейти на использование BOSH и XMPP . Это довольно новая «волна» технологий, но уже есть немало библиотек, которые помогут вам на вашем пути. Я бы предложил использовать Strophe и XMPPHP . Затем ваши клиенты могут подключаться к серверу BOSH (я использую Openfire ), и это может масштабировать до тысяч активных соединений на сервер.

0 голосов
/ 24 марта 2010

Node.js выглядит довольно милым решением для подобных вещей. (Все еще немного игровой для производства, но все равно круто). PHP - ужасная среда для подобных вещей, вы должны изменить способ взаимодействия сервера с запросами, потому что вы больше не отвечаете немедленно. В Python есть несколько таких серверов, как Twisted, которые отлично подходят для этого, потому что они позволяют вам быть сервером . Неважно, на каком языке вы его пишете, вы должны изменить типичную модель запроса / ответа. (В качестве примера сервер Grizzly Comet компании Glassfish делает это для Java)

0 голосов
/ 22 марта 2010

Ajax с длинным опросом - это простое решение, в jquery и в любой другой основной js-фреймворке есть плагины, которые помогут вам сделать это.

0 голосов
/ 05 марта 2010

Сначала вам нужно понять, что такое кометное приложение. Концепция построения кометного приложения объясняется в вики на Comet (программирование)

Что вам нужно понять, так это то, что вы можете использовать любой язык программирования для создания кометного приложения, если оно соответствует принципам, объясненным в вики

1.Ajax с длинным опросом

2.Streaming

Вы можете проверить пример кода на Простой пример кода «Длинный опрос»

Теперь перейдем к проблемам -

1.Вы используете длинный опрос ajax, тогда браузер (запрос ajax) будет продолжать опрашивать сервер на предмет данных. Это может потреблять память на сервере или замедлять работу браузера через некоторое время.

Несколько предложений

JQuery PeriodicalUpdater (длинный опрос AJAX / опрос сервера)

Обработка длинных опросов

RobertFischer / JQuery-PeriodicalUpdater

Что нужно проверить, чтобы реализовать это -

a) Как часто вы ожидаете обновления данных на сервере.

b) Сколько времени серверный скрипт будет запускать для проверки, извлечения и обработки данных перед отправкой их на клиентскую сторону.

2.Вы можете реализовать потоковую передачу, используя следующее -

Как реализовать COMET с PHP

Lightstreamer Dojo

Dojo Charting + Lightstreamer Comet Demo

Демо

Ajax Push Engine или проект APE

Что нужно для этого проверить -

a) Позволит ли ваш хостинг-провайдер установить их на хостинг-серверах

b) Использование вашей оперативной памяти и пропускной способности (вам потребуется выделенный сервер с пакетом, который дает вам много оперативной памяти и пропускной способности)

Это зависит от того, что и как ваши требования. Вам придется проанализировать и приблизиться.

Если то, что вы реализуете, является небольшим приложением, вы можете пойти на опрос Ajax Long, учитывая тот факт, что вы проанализировали и обработали недостатки этого подхода.

Если у вас большое приложение, вы можете пойти на пару.

0 голосов
/ 25 декабря 2009

Вам следует попробовать Realplexor Дмитрия Котерова , который является комет-сервером, предоставляющим Javascript и PHP API.

Readme.txt на английском языке предоставляется в пакете .

0 голосов
/ 25 декабря 2009

Есть решения, которые вам нужны:

  1. почти решение 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/lib/dklab_multiplexor/&sl=ru&tl=en

  2. точное решение COMET в php (это то, что вы хотите, я думаю): http://translate.google.com/translate?hl=ru&sl=ru&tl=en&u=http://dklab.ru/lib/dklab_realplexor/

0 голосов
/ 25 декабря 2009

Вам не нужно изучать новый язык, чтобы реализовать такую ​​функцию.

Например, вы можете использовать Quercus (Java-реализация PHP) и реализовать серверное приложение Comet, используя модель управления памятью JVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...