CGI-FCGI(1) User Commands CGI-FCGI(1)

cgi-fcgi - پل ارتباطی میان CGI و FastCGI

cgi-fcgi -f cmdPath
cgi-fcgi -bind -connect connName
cgi-fcgi -start -connect connName appPath [nServers]
cgi-fcgi -connect connName appPath [nServers]

دستور cgi-fcgi یک برنامه CGI/1.1 است که با یک برنامه FastCGI از پیش در حال اجرا ارتباط برقرار می‌کند تا به یک درخواست HTTP پاسخ دهد. همچنین cgi-fcgi می‌تواند یک برنامه FastCGI را راه‌اندازی نماید.

هنگامی که cgi-fcgi را به صورت زیر فراخوانی می‌کنید:

cgi-fcgi -f cmdPath

دستور cgi-fcgi فایل موجود در cmdPath را باز کرده و آرگومان‌های خود را از آن فایل می‌خواند. cgi-fcgi خطوطی را که با نویسه توضیح # آغاز می‌شوند نادیده می‌گیرد. اولین خط غیرتوضیحی باید شامل آرگومان‌های معتبر در یکی از سه حالت دیگر باشد.

حالت -f از cgi-fcgi برای سیستم‌های یونیکس طراحی شده است که خانواده فراخوانی‌های سیستمی exec(2) در آن‌ها از اجرای فایل‌های مفسر دستور پشتیبانی می‌کند. برای نمونه، اگر فایلی با دسترسی اجرا شامل متن زیر باشد:

#! /bin/cgi-fcgi -f
-connect /httpd/root/sock/app /httpd/root/bin/app

نتیجه همانند اجرای دستور زیر خواهد بود:

/bin/cgi-fcgi -connect /httpd/root/sock/app /httpd/root/bin/app

هنگامی که cgi-fcgi را به صورت زیر فراخوانی می‌کنید:

cgi-fcgi -bind -connect connName

آرگومان connName یا مسیر یک سوکت شنود دامنه یونیکس (Unix domain listening socket) است یا یک زوج host:port. اگر connName شامل دونقطه (:) باشد، به عنوان host:port در نظر گرفته می‌شود. cgi-fcgi با استفاده از connName یک فراخوانی connect(2) انجام می‌دهد. اگر اتصال با موفقیت برقرار شود، cgi-fcgi متغیرهای محیطی CGI و داده‌های ورودی استاندارد (stdin) را به برنامه FastCGI ارسال می‌کند، و داده‌های خروجی استاندارد (stdout) و خروجی خطای استاندارد (stderr) را از برنامه به stdout دستور cgi-fcgi (که به احتمال زیاد به یک وب‌سرور متصل است) هدایت می‌نماید. هنگامی که برنامه FastCGI پایان پاسخ خود را اعلام کند، cgi-fcgi بافرهای خود را تخلیه کرده و خارج می‌شود، و سپس وب‌سرور پاسخ HTTP را کامل می‌نماید.

هنگامی که cgi-fcgi را به صورت زیر فراخوانی می‌کنید:

cgi-fcgi -start -connect connName appPath [nServers]

دستور cgi-fcgi وظیفه راه‌اندازی یک یا چند فرایند از برنامه FastCGI را بر عهده می‌گیرد. آرگومان connName یا مسیر سوکت شنود دامنه یونیکس را مشخص می‌کند که cgi-fcgi ایجاد خواهد کرد، یا به صورت "localhost:NNN" است که در آن NNN شماره پورت سوکت شنود TCP/IP است که cgi-fcgi روی ماشین محلی ایجاد خواهد نمود. (دستور cgi-fcgi فرایندی روی ماشین‌های راه دور ایجاد نمی‌کند.) پس از اینکه cgi-fcgi سوکت شنود را ایجاد کرد، به تعداد nServers کپی از فرایندی که فایل اجرایی appPath را اجرا می‌کند با fork منشعب می‌سازد. اگر nServers حذف شود، رفتار آن به گونه‌ای است که گویی مقدار "1" تعیین شده است. فرایندها در همان سوکت شنود واحد سهیم هستند.

هنگامی که cgi-fcgi را به صورت زیر فراخوانی می‌کنید:

cgi-fcgi -connect connName appPath [nServers]

دستور cgi-fcgi ابتدا -bind را انجام می‌دهد و سپس در صورت نیاز، -start را اجرا کرده و عملیات -bind را تکرار می‌کند. یعنی cgi-fcgi ابتدا به گونه‌ای عمل می‌کند که گویی دستور به صورت زیر بوده است:

cgi-fcgi -bind -connect connName

اگر اتصال با شکست روبرو شود، cgi-fcgi دستور زیر را امتحان می‌کند:

cgi-fcgi -start -connect connName appPath [nServers]

و سرانجام دوباره تلاش می‌کند:

cgi-fcgi -bind -connect connName

در این حالت، cgi-fcgi از اتصالات TCP/IP پشتیبانی نمی‌کند.

متغیرهای محیطی متداول CGI، اما این متغیرها توسط cgi-fcgi تفسیر نمی‌شوند.

FCGI_accept(3)

دستور cgi-fcgi در صورت بروز خطا پاسخ‌های HTTP مفیدی تولید نمی‌کند، و هنگامی که به صورت start-fcgi اجرا شود هیچ پاسخی تولید نمی‌نماید.

در سیستم‌های Digital UNIX 3.0، پیاده‌سازی سوکت‌های دامنه یونیکس زمانی که این سوکت‌ها روی سیستم فایل NFS ذخیره شوند کار نمی‌کند. نشانه: ممکن است cgi-fcgi دچار اشکال core dump شود یا با وضعیت ۳۸ خارج گردد. راه‌حل جایگزین: سوکت‌ها را در سیستم‌های فایل محلی (مانند /tmp) ذخیره کنید یا از TCP/IP بهره بگیرید.

در سیستم‌های AIX پیاده‌سازی سوکت‌های شنود از اشتراک‌گذاری سوکت پشتیبانی نمی‌کند، و کتابخانه‌های استاندارد برنامه FastCGI نمی‌توانند دسترسی به سوکت‌های شنود AIX را همگام‌سازی کنند. راه‌حل جایگزین: در AIX از آرگومان nServers استفاده نکنید.

حق نشر (c) 1996 متعلق به Open Market, Inc.

برای اطلاعات درباره نحوه استفاده و توزیع مجدد این فایل و سلب مسئولیت تمام ضمانت‌ها، به فایل "LICENSE" مراجعه کنید.

September 1997 FastCGI