Показать полную графическую версию : Преимущества CGI для одновременного конекта N посетителей
Есть ли оно какое? и так ли я понимаю главную сегодняшнюю функцию применения на сайтах CGI??
дело в том что я на бесплатном хостинге НЕ поддерживающем БД, создал чат.. и там все сообщения записываются в файл, я вот подумал, что будет если два пользователя одновременно введут сообщения, как мне кажется либо ни одно сообщение не дойдет, или дойдет только одно.
как в таких случаях создать поочередную запись в файл одновременно запрашивающих этот же файл пользователей на запись например? подскажите что вы знаете пожалуста, и как этого можно добится с помощью CGI?
адрес моего тестируемого чата http://vv.fatal.ru
П. С.
я с CGI никогда не работал и почти вообще ничего о нем(или о них) не представляю)).....:(
Преимущества CGI для одновременного конекта N - нет, конечно. Никакого преимущества тут нет и быть не может. Просто технология CGI более старая, чем технология PHP/ASP и, соответственно, есть люди, которые к ней привыкли, а есть наработанные скрипты (зачем же от них отказываться). А с файлами никто лучше, или хуже не работает. Единственное, что в случае применения Perl/cgi можно, например, задействовать не-вебсерверный кусок файловой стуктуры (если адми туда пускает, чего на хостингах, чаще всего, не бывает).
Что касается блокировки фалов, на каком языке блокировать-то :) ? (Или просто блокировать внешними средствами OS?) можно тз поподробней :) ?
На всякий случай отпишу про Perl (как про наиболее часто употребляемый язык). Есть там такая встроенная функция flock. Она блокирует доступ к файлу, пока в него вносятся изменения.
flock(дескриптор_файла, код_блокировки),
где код_блокировки:
*1 - для разделяемого доступа (совместная блокировка)
*2 - для монопольного доступа (монопольная блокировка)
*4 - асинхронная блокировка (функция flock не ожидает активизации блокировки)
*8 - снятие блокировки
НО: Функция flock в Perl'е реализует так называемую "мягкую болкировку", блокируя другие вызовы flock, а не сами процессы. Проще говоря, это не означает, что остальные программы не смогут использовать заблокированный файл, просто они не смогут получить от функции flock значение "истина".
В переводе, если процесс, обращаясь к файлу, не использует проверку блокировки, то может получиться ерунда :( Но в твоем случае, можно просто аккуратно следить за собственным кодом
Возможный вариант: кроме flock поступать, как pop3d *в *nix:
когда ты забираешь письмо с сервера, там создается копия файла твоего почтового ящика с точкой в начале имени (например: .fade) Это признак для программы, что ящик занят.
зы под виндами flock, по-моему просто не работает, тк, судя по всему, является надстройкой над системными функциями
Исправлено: mar, 15:27 27-06-2004
Vlad Drakula
27-06-2004, 19:47
FADE
лично я вижу в применении CGI либо когда нужно сделать так чтобы каждый скрипт запускался в отдельном потоке, в таком случае сметрь одного никак не повлияет на другие процессы.
если же упадет модуль, то упадут все процессы.
еще одно преивущество в том что в CGI можно использовать бинарники, это может быть полезно в тех случаях когда нужно максимальная скорость матаметики ( реальных примером придумать не смог)
испольнение скриптов в модуле позволяет снизить время отклика, в некоторых случаях производительность повышается в разы!
Vlad Drakula
в отдельном потоке? т.е. для каждого посетителя своя сессия я так понимаю? а гденибудь можно найти готовые подобные скрипты, чтобы хотябы получить представление как это работает, и как для этого нужно ставить перл к апачу? как модуль или как?..((
Добавлено:
mar
почти ничего не понял, но всеравно спасибо:gigi:
как только на линукс уговорят перейти обязат flock попробую:oszone:
А у тебя нету какогонибудь мануальчика по Перлу на не буржуйском под винды?
Vlad Drakula
28-06-2004, 08:10
FADE
сессия на каждого юзера всегда своя, не зависимо CGI или не CGI просто по определению!
еще уточнение - для создания каждой страницы используется отдельный процес, в случае CGI от внешний, в случае МОД он внутренний. Еще хочу отметить что есть серверная Ява, так она работает постоянно не зависимо есть запросы к серверу или нет.
FADE
все это я наблюдал с ПХП, сначала он у меня стоял как CGI, потом как модуль.
FADE
если нужно то у меня есть 2 книзки на английском и одна на русском - всего 3,3мб
Vlad Drakula
Vlad Drakula
на русском не отказался бы)
FADE
скрипт и под cgi, и под модуль работать будет один и тот же.
Просто дальше либо сервер для каждого cgi-скрипта запускает на выполнение интерпритатор в отдельном процессе (или, если писать на C - бинарник программы). По завершении работы процесс уничтожается. А модуль имеет свой интерпритатор. (Но, Vlad, отвалить модуль по ошибке мягко говоря не просто, этак можно и интерпритатор уничтожить :)
Perl категорически не рекомендую(!) ставить модулем, тк модулем он действительно работает быстрее, но пожирает всю имеющуюся память (работает с ней, прямо, как газ с объемом :( )
Наверное, неудачно объяснила. Извини, могу попробовать переобъяснить, если есть вопросы. Я так поняла, что нужна блокировка файлов и написала, как это делать на Perl. А на каком языке написан чат?
Мануалыы поищу, где-то у меня были книги (но не под wind-ы, конечно, а проосто по perl-у)
Vlad Drakula
28-06-2004, 18:56
mar
модуль можно повесить!
я встечал людей которые вешали, но в основном это связано с тем особенностями Апач2 вешали они на ресурсоемких задачах - например построить дерево из 100мб xml"ки на выделенном сервере!
FADE
хочешь докусентацию... пошли мне запрос на мыло!
mar
чат целиком на php.. без базнаписан с нуля
короче говоря ребят, как обычно устонавливают перл на виртуальном сервере?)))
FADE
sorry, я ответила по Perl-у, просто, решив, что раз cgi, значит perl Если речь идет о php, то можно решать для php
Или надо уже не файлы лочить, а perl ставить ;)?
mar
и то и то надо))
файлыы надо лочить, и я так понимаю посредством cgi лутше всего, но а чтобы cgi скрипт поставить нужно установить перл, а чтобы перл установить надо знать как его установить и как он будет действовать по отношению к апачу: как модуль или не зависимо, я ничего не забыл?)
Добавлено:
минуточку, или cgi могут быть написаны и на php???? если так то это решает все проблемы)
файлы лочить можно чем угодно, я уже писала, что cgi тут не причем. В PHP имеется такой же flock (http://php3.de/manual/ru/function.flock.php) И тоже с заморочками (см по ссылке)
Кроме того: Замечание: Поскольку flock() требует указателя на файла, Вам может понадобиться использовать специальный lock file для защиты доступа к файлу, который Вы собираетесь менять, открвая его на запись (с "w" или "w+" аргументами функции fopen()). Так что, флаг в руки :) (и напоиминаю про решение в стиле pop3d)
Perl на хостинге у провайдера (не колакейшен, не выделенный jail) ставит (или не ставит) хостер.
дык как же я ето flock буду тестировать у себя под виндой если она доступна только под линух?
у моего хостера вроде установлен перл):oszone:
FADE
зато у хостера *nix, раз он еще жив ;)
на Perl flock тоже под win, насколько мне помнится, не пойдет. Так что в этом плане смысла перепрыгивать на другой язык - ни малейшего. :o
Vlad Drakula
29-06-2004, 20:40
хочу заметить что с помошью CGI не получится достич большой производительности!
на среднем сервере ты сможешь достичь максимум 10000 страниц в час, для чата это очень мало!
так что либо супер мощный сервер, либо мод!
Vlad Drakula
вот как этот мод привязать к апачу и мускулю..
FADE
я боюсь показаться навязчивой :), но, если *ты хостишься у хостера, то mod_ или не mod_ ставит он. А если у себя, так вы с Владом же долго и, вроде бы успешно мод_пхп ставили (http://www.forum.oszone.ru/topic.cgi?forum=20&topic=1007)? или я в конец запуталась, и там был не модуль :o ?
Исправлено: mar, 1:12 30-06-2004
mar
ну дык мы пхп как модуль поставили, а я про перл спрашиваю.
почему перл хочу поставить, потому как не получил внятного ответа, cgi скрипты пишутся только на языке perl или можно и на пхп???
Prisoner
30-06-2004, 18:38
FADE
Если я сам ничего не путаю, то вы просто пишете скрипт, а вот как он будет выполняться - в режиме мода к серверу или как самостоятельный процесс уже до лампочки... почти. К примеру в php если он не в качестве мода нельзя отправлять заголовки авторизации.
Vlad Drakula
30-06-2004, 18:44
FADE
чтобы пхп был модулем:
LoadModule php4_module "C:/php/sapi/php4apache2.dll"
чтобы пхп был CGI:
Action application/x-httpd-php "/php/php.exe"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.