Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Преимущества CGI для одновременного конекта N посетителей (http://forum.oszone.net/showthread.php?t=31118)

FADE 27-06-2004 03:42 213355

Есть ли оно какое? и так ли я понимаю главную сегодняшнюю функцию применения на сайтах CGI??

дело в том что я на бесплатном хостинге НЕ поддерживающем БД, создал чат.. и там все сообщения записываются в файл, я вот подумал, что будет если два пользователя одновременно введут сообщения, как мне кажется либо ни одно сообщение не дойдет, или дойдет только одно.
как в таких случаях создать поочередную запись в файл одновременно запрашивающих этот же файл пользователей на запись например? подскажите что вы знаете пожалуста, и как этого можно добится с помощью CGI?
адрес моего тестируемого чата http://vv.fatal.ru

П. С.
я с CGI никогда не работал и почти вообще ничего о нем(или о них) не представляю)).....:(

mar 27-06-2004 15:25 213356

Цитата:

Преимущества 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, по-моему просто не работает, тк, судя по всему, является надстройкой над системными функциями


[s]Исправлено: mar, 15:27 27-06-2004[/s]

Vlad Drakula 27-06-2004 19:47 213357

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

если же упадет модуль, то упадут все процессы.

еще одно преивущество в том что в CGI можно использовать бинарники, это может быть полезно в тех случаях когда нужно максимальная скорость матаметики ( реальных примером придумать не смог)

испольнение скриптов в модуле позволяет снизить время отклика, в некоторых случаях производительность повышается в  разы!

FADE 28-06-2004 02:47 213358

Vlad Drakula
в отдельном потоке? т.е. для каждого посетителя своя сессия я так понимаю? а гденибудь можно найти готовые подобные скрипты, чтобы хотябы получить представление как это работает, и как для этого нужно ставить перл к апачу? как модуль или как?..((

Добавлено:

mar
почти ничего не понял, но всеравно спасибо:gigi:
как только на линукс уговорят перейти обязат flock попробую:oszone:

А у тебя нету какогонибудь мануальчика по Перлу на не буржуйском под винды?

Vlad Drakula 28-06-2004 08:10 213359

FADE
сессия на каждого юзера всегда своя, не зависимо CGI или не CGI просто по определению!

еще уточнение - для создания каждой страницы используется отдельный процес, в случае CGI от внешний, в случае МОД он внутренний. Еще хочу отметить что есть серверная Ява, так она работает постоянно не  зависимо есть запросы к серверу или нет.

FADE
все это я наблюдал с ПХП, сначала он у меня стоял как CGI, потом как модуль.

FADE
если нужно то у меня есть 2 книзки на английском и одна на русском - всего 3,3мб

FADE 28-06-2004 08:23 213360

Vlad Drakula
Vlad Drakula
на русском не отказался бы)

mar 28-06-2004 11:47 213361

FADE
скрипт и под cgi, и под модуль работать будет один и тот же.
Просто дальше либо сервер для каждого cgi-скрипта запускает на выполнение интерпритатор в отдельном процессе (или, если писать на C - бинарник программы). По завершении работы процесс уничтожается. А модуль имеет свой интерпритатор. (Но, Vlad, отвалить модуль по ошибке мягко говоря не просто, этак можно и интерпритатор уничтожить :)
Perl категорически не рекомендую(!) ставить модулем, тк модулем он действительно работает быстрее, но пожирает всю имеющуюся память (работает с ней, прямо, как газ с объемом :( )

Наверное, неудачно объяснила. Извини, могу попробовать переобъяснить, если есть вопросы. Я так поняла, что нужна блокировка файлов и написала, как это делать на Perl. А на каком языке написан чат?
Мануалыы поищу, где-то у меня были книги (но не под wind-ы, конечно, а проосто по perl-у)

Vlad Drakula 28-06-2004 18:56 213362

mar
модуль можно повесить!
я встечал людей которые вешали, но в основном это связано с тем особенностями Апач2 вешали они на ресурсоемких задачах - например построить дерево из 100мб xml"ки на выделенном сервере!

FADE
хочешь докусентацию... пошли мне запрос на мыло!

FADE 28-06-2004 21:09 213363

mar
чат целиком на php.. без базнаписан с нуля

короче говоря ребят, как обычно устонавливают перл на виртуальном сервере?)))

mar 29-06-2004 00:04 213364

FADE
sorry, я ответила по Perl-у, просто, решив, что раз cgi, значит perl Если речь идет о php, то можно решать для php
Или надо уже не файлы лочить, а perl ставить ;)?

FADE 29-06-2004 01:13 213365

mar

и то и то надо))

файлыы надо лочить, и я так понимаю посредством cgi лутше всего, но а чтобы cgi скрипт поставить нужно установить перл, а чтобы перл установить надо знать как его установить и как он будет действовать по отношению к апачу: как модуль или не зависимо, я ничего не забыл?)

Добавлено:

минуточку, или cgi могут быть написаны и на php???? если так то это решает все проблемы)

mar 29-06-2004 01:43 213366

файлы лочить можно чем угодно, я уже писала, что cgi тут не причем. В PHP имеется такой же flock И тоже с заморочками (см по ссылке)
Кроме того:
Цитата:

Замечание: Поскольку  flock() требует указателя на файла, Вам может понадобиться использовать специальный  lock file для защиты доступа к файлу, который Вы собираетесь менять, открвая его  на запись  (с "w" или "w+" аргументами функции fopen()).
Так что, флаг в руки :) (и напоиминаю про решение в стиле pop3d)
Perl на хостинге у провайдера (не колакейшен, не выделенный jail) ставит (или не ставит) хостер.

FADE 29-06-2004 01:47 213367

дык как же я ето flock буду тестировать у себя под виндой если она доступна только под линух?
у моего хостера вроде установлен перл):oszone:

mar 29-06-2004 02:10 213368

FADE
зато у хостера *nix, раз он еще жив ;)
на Perl flock тоже под win, насколько мне помнится, не пойдет. Так что в этом плане смысла перепрыгивать на другой язык - ни малейшего. :o


Vlad Drakula 29-06-2004 20:40 213369

хочу заметить что с помошью CGI не получится достич большой производительности!

на среднем сервере ты сможешь достичь максимум 10000 страниц в час, для чата это очень мало!

так что либо супер мощный сервер, либо мод!

FADE 29-06-2004 22:30 213370

Vlad Drakula
вот как этот мод привязать к апачу и мускулю..

mar 30-06-2004 01:09 213371

FADE
я боюсь показаться навязчивой :), но, если *ты хостишься у хостера, то mod_ или не mod_ ставит он. А если у себя, так вы с Владом же долго и, вроде бы успешно мод_пхп ставили? или я в конец запуталась, и там был не модуль :o ?


[s]Исправлено: mar, 1:12 30-06-2004[/s]

FADE 30-06-2004 01:20 213372

mar
ну дык мы пхп как модуль поставили, а я про перл спрашиваю.

почему перл хочу поставить, потому как не получил внятного ответа, cgi скрипты пишутся только на языке perl или можно и на пхп???

Prisoner 30-06-2004 18:38 213373

FADE
Если я сам ничего не путаю, то вы просто пишете скрипт, а вот как он будет выполняться - в режиме мода к серверу или как самостоятельный процесс уже до лампочки... почти. К примеру в php если он не в качестве мода нельзя отправлять заголовки авторизации.

Vlad Drakula 30-06-2004 18:44 213374

FADE
чтобы пхп был модулем:
LoadModule php4_module "C:/php/sapi/php4apache2.dll"

чтобы пхп был CGI:
Action application/x-httpd-php "/php/php.exe"


Время: 14:47.

Время: 14:47.
© OSzone.net 2001-