Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > multiplexor vs fastcgi


Автор: frenkys 11.11.2009, 15:18
Помогите понять в чем преимущество мультиплексора http://dklab.ru/lib/dklab_multiplexor/ перед обычным fast_cgi который висит в памяти.
Все равно ведь на клиенте мы через javascript посылаем запрос толи к мультиплексору толи к фаст цги демону.
Я не могу понять в чем выигрышь.

Автор: ginnie 11.11.2009, 15:42
frenkys, dklab верно сообщает, что поддержание соединения с сервером для получения новых данных более эффективно, чем его периодический опрос. dklab_multiplexor используется для обработки большого количества таких соединений. Посчитайте, сколько потребуется памяти для обработки такого количества соединений при помощи fast_cgi и поймете, в чем выигрыш.

P.S. еще обращаю внимание, что miltiplexor используется только для отдачи данных клиентам, запросы клиентов должны идти в обход miltiplexor'а.

Автор: frenkys 11.11.2009, 15:56
Цитата(ginnie @ 11.11.2009,  15:42)
P.S. еще обращаю внимание, что miltiplexor используется только для отдачи данных клиентам, запросы клиентов должны идти в обход miltiplexor'а.

Ну ведь постоянный коннект :
На стороне клиента  через JS это и есть опрос по таймауту.



Мультиплексор же знает кому что отдавать значит он как минимум принимает параметр id 




Тоесть получаеться вся разница в архитектуре fast_cgi - изза  того что он не libevent ?

Добавлено через 4 минуты и 29 секунд
Вот например я проверяю количество новых сообщений которое пришло пользователю с помощью js раз в 1 минуту   (джс обращаеться к демону и берет из мемкеша данные)
использование мультиплексора для этих целей даст выигрышь?

Смотрю гмаил -там количество сообщений тоже проверяется раз 100ms



Автор: ginnie 11.11.2009, 16:06
frenkys, алгоритм работы такой: устанавливаем с сервером соединение для получения данных (информации о письмах) и не разрываем его. Если на сервер пришло письмо, то в установленном соединении клиенту приходят новые данные, которые он обрабатывает. Соединение не разрывается. Пришло еще одно письмо, и данные снова передаются клиенту. Никакие данные от клиента в этом соединении на сервер не передаются. Если надо что-то передать, делается отдельное обычное (недолгоживущее) соединение.
Такой алгоритм работы удобен в основном для чатов.

P.S. libevent - всего лишь библиотека, реализующая событийную машину (я лично обычно использую libev) и никак не связана с обсуждаемым вопросом (т.к. событийная машина используется также и в fast_cgi).

Автор: frenkys 11.11.2009, 16:37
Спасибки, до меня начинает по-тихонечку доходить =)

Автор: gcc 11.11.2009, 23:42
ginnie, а чем mod_perl не подойдет?

я где-то видел что подобное как event встроенное в апаче, т.е. если будет много соединений, то очень много памяти жраться не будет только из-за соединения...

еще kevent есть в unix  (в linux по другому называется) с помощью события ядра можно построить высокопроизводительный веб-сервер http://search.cpan.org/~msergeant/IO-KQueue-0.32/KQueue.pm  http://www.opennet.ru/base/dev/kevent_freebsd.txt.html но это для очень и очень нагруженных проектов, а не таких где....

еще fast_cgi жрет жестко память, если ее мало на сервер, лучше не использовать fast_cgi

Автор: ginnie 12.11.2009, 13:04
Цитата(gcc @  11.11.2009,  23:42 Найти цитируемый пост)
ginnie, а чем mod_perl не подойдет?


gcc, задача такая: соединится с сервером, поддерживая соединения получать от сервера новые данные (сообщения чата).
Предложи решение с использованием mod_perl.

Автор: gcc 12.11.2009, 17:00
ginnie, точно не скажу, но примерно как думаю:
(я имел ввиду fcgi vs mod_perl)

главное преимущество mod_perl то что он кэширует код во время выполнения в режиме Apache::Runtime, правильно?

в документации я увидел что многие веб-сервера используют данные технологии select/kevent/epoll, т.е. открытие нового соединения возможно скорее всего не будет сильно затруднительно?
http://kostenko.name/2009/11/05/accept-filters/ и http://sysoev.ru/freebsd/accept-filters.html

в документации Catalyst написано что mod_perl будет быстрее

еще писали портал на котором 10 млн хостов,в котром был Catalyst+MooseX+mod-perl там блы чат и очень много всего (не знаю как все работало, но писали что под Catalyst+mod_perl2)

например, может нужно выбирать fcgi или mod_perl в замисимости от контента? например, большой хостинговый сервер картинок отдает картинки через fcgi 

====
а Server Push говорят как-то можно реализовать в Apache MPM event для apache 2.2 mod_perl 
http://javascript.ru/ajax/server-push/overview#server-push:-chastyy-opros-vs-postoyannoe-soedinenie
http://forums.devx.com/showthread.php?t=163336

Автор: DurRandir 15.11.2009, 16:12
Этот мультиплексор и factcgi служат совершенно разным целям. 

Fastcgi - это протокол общения между веб-сервером и сервером приложений. Его нельзя выставить "наружу", обязательно нужен веб-сервер. Более того, веб-сервер с сервером приложений могут общаться и по http, и (в обобщённом смысле) через mod_perl, или через что-то своё (что делает dklab_multiplexor, если я правильно помню).

dklab_multiplexor в этой цепочке является заменой веб-серверу, позволяя эффективно общаться с клиентами с определённой задачей. Вам все равно нужен какой-то сервер приложений, который будет поставлять данные.

Автор: frenkys 17.11.2009, 09:03
спасибо, разобрался

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)