کتابخانه‌ی استاندارد · شبکه

پیکربندی وب net/httpd/conf

خواننده‌ی پیکربندی سرور وب: بلوک، تنظیم و مقدار به قالب بلوکی سلام، همراه جایگاه برای خطاها.

واردسازی net.httpd.conf

این بسته متنی را می‌خواند که به قالب بلوکی پیکربندی net/httpd نوشته شده و یک درخت پس می‌دهد. از سرور وب چیزی نمی‌داند: فقط شکل‌ها را می‌شناسد و اینکه کدام نام‌ها معتبرند را net/httpd تعیین می‌کند. برای پرونده‌های تنظیم خودتان هم که شبیه سلام‌اند می‌توانید از آن استفاده کنید.

دو شکل وجود دارد. تنظیم یعنی یک نام، علامت مساوی و یک یا چند مقدار در همان خط: max connections = 100. بلوک یعنی یک نام، رشته‌های اختیاری، دونقطه، محتوا و end: location "/api/": cache = 1h end. نام می‌تواند چند واژه باشد (error page)، مقدارها رشته میان نقل‌قول‌اند (با \n، \t، \" و \\)، رشته میان پشت‌نقل‌قول (همان‌طور که نوشته شده خوانده می‌شود، پس عبارت باقاعده نیازی به دوبرابرکردن بک‌اسلش ندارد)، عدد با یکای اختیاری مثل 64mb یا 30d، و واژه‌ی ساده مثل tls. توضیح‌ها // تا آخر خط یا /* ... */ هستند.

همه‌چیز در یک Doc است، فهرستی از گره‌ها که با شماره به هم اشاره می‌کنند: گره ۰ ریشه است، Find و ChildAt پایین می‌روند و فیلدهای یک گره واژه‌ها، برچسب‌ها، مقدارها و فرزندانش را دارند. وقتی کارتان تمام شد سند را با Free آزاد کنید.

چیزهایی که مردم اشتباه می‌کنند:

  • فهرست مقدارها در پایان خط، در end یا جایی که تنظیم بعدی در همان خط شروع می‌شود تمام می‌شود، پس a = 1 b = 2 دو تنظیم است. واژه‌ی ساده در آخر فهرست مقدار حساب می‌شود، برای همین listen = 443 tls کار می‌کند.
  • تجزیه با اولین خطا می‌ایستد و ok آن‌وقت نادرست است. خطا خط و ستون دارد و ErrorText آن‌ها را مثل کامپایلرها جلوی پیام می‌گذارد.
  • نشانی‌ها و هر چیزی که دونقطه دارد باید نقل‌قول داشته باشد: listen = "127.0.0.1:8080". بدون آن دونقطه آغاز یک بلوک خوانده می‌شود.
  • words یک گره نام آن را نگه می‌دارد، پس Name آن‌ها را با یک فاصله به هم می‌چسباند. برچسب بلوک‌ها، مثل مسیر یک location، در labels است نه در نام.

گونه‌ها

مقدار Value

ساختار مقدار
یک مقدار از یک تنظیم.
نامانگلیسیگونهتوضیح
نوع مقدارkindصحیح = 0VAL_WORD، VAL_STR یا VAL_NUM.
متن مقدارtextرشته = ""مقدار به‌صورت متن؛ رشته‌ها بدون نقل‌قول و با گریزها باز شده.
خط مقدارlineصحیح = 0خط، با شماره‌گذاری از ۱.
ستون مقدارcolصحیح = 0ستون، با شماره‌گذاری از ۱.
net-httpd-conf-Parse.salam
واردسازی شبکه.سرور وب.پیکربندی وب

تابع ریشه:
    متن := `
server:
    site:
        listen = 80 tls
        names = "a.test www.a.test"
        location "/api/": cache = 1h end
    end
end
`
    د := پیکربندی وب.تجزیه(متن)
    سرچاپ د.درست است، د.گره ها.طول()، پیکربندی وب.شمار فرزندان(د، پیکربندی وب.گره ریشه())
    سر := پیکربندی وب.یافتن فرزند(د، پیکربندی وب.گره ریشه()، "server")
    سا := پیکربندی وب.یافتن فرزند(د، سر، "site")
    سرچاپ پیکربندی وب.نام(د، سا)، پیکربندی وب.شمار فرزندان(د، سا)، د.گره ها.بگیر(سا).بلوک است
    ل := پیکربندی وب.یافتن فرزند(د، سا، "listen")
    م := د.گره ها.بگیر(ل).مقدارها.بگیر(۰)
    سرچاپ م.متن مقدار، م.نوع مقدار == پیکربندی وب.مقدار عددی، م.خط مقدار، م.ستون مقدار
    وا := د.گره ها.بگیر(ل).مقدارها.بگیر(۱)
    سرچاپ وا.متن مقدار، وا.نوع مقدار == پیکربندی وب.مقدار واژه، پیکربندی وب.متن مقدار گره(د، پیکربندی وب.یافتن فرزند(د، سا، "names")، ۰)
    ن := د.گره ها.بگیر(پیکربندی وب.یافتن فرزند(د، سا، "names")).مقدارها.بگیر(۰)
    سرچاپ ن.نوع مقدار == پیکربندی وب.مقدار رشته
    مس := پیکربندی وب.فرزند شماره(د، سا، ۲)
    ک := د.گره ها.بگیر(مس)
    سرچاپ پیکربندی وب.نام(د، مس)، ک.برچسب ها.بگیر(۰)، ک.بلوک است، ک.واژه های نام.طول()، ک.فرزندان.طول()، ک.خط گره، ک.ستون گره
    پیکربندی وب.آزاد سازی(د)
پایان
خروجیtrue 7 1 site 3 true 80 true 4 18 tls true a.test www.a.test true location /api/ true 1 1 6 9

گره Node

ساختار گره
یک تنظیم یا بلوک از درخت.
نامانگلیسیگونهتوضیح
بلوک استblockمنطقی = نادرستبرای بلوک درست و برای تنظیم نادرست.
واژه های نامwordsوکتور<رشته>واژه‌های نام، مثل error و page.
برچسب هاlabelsوکتور<رشته>رشته‌هایی که میان نام و دونقطه‌ی یک بلوک نوشته شده.
مقدارهاvaluesوکتور<مقدار>مقدارهای یک تنظیم.
فرزندانchildrenوکتور<صحیح>شماره‌ی گره‌های درون یک بلوک.
خط گرهlineصحیح = 0خطی که از آن شروع می‌شود.
ستون گرهcolصحیح = 0ستونی که از آن شروع می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

سند Doc

ساختار سند
یک سند تجزیه‌شده: همه‌ی گره‌ها و اولین خطا.
نامانگلیسیگونهتوضیح
گره هاnodesوکتور<گره>همه‌ی گره‌ها؛ گره ۰ ریشه است.
درست استokمنطقی = درستاگر متن بدون خطا تجزیه شد درست.
پیام خطاerrorرشته = ""پیام اولین خطا، و وقتی خطایی نیست خالی.
خط خطاlineصحیح = 0خط خطا.
ستون خطاcolصحیح = 0ستون خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

پایاها و متغیرها

مقدار واژه VAL_WORD

پایا مقدار واژه: صحیح۳۲ = 0
نوع مقداری که یک واژه‌ی ساده است، مثل tls یا auto.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

مقدار رشته VAL_STR

پایا مقدار رشته: صحیح۳۲ = 1
نوع مقداری که میان نقل‌قول یا پشت‌نقل‌قول نوشته شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

مقدار عددی VAL_NUM

پایا مقدار عددی: صحیح۳۲ = 2
نوع مقداری که با رقم شروع می‌شود، با یکا یا بدون آن، مثل 8080 یا 30d؛ متن یکا را نگه می‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

تابع‌ها

تجزیه Parse

تابع تجزیه(text: رشته): سند
متن را تجزیه می‌کند و سند را برمی‌گرداند؛ پیش از استفاده ok را بررسی کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

آزاد سازی Free

تابع آزاد سازی(d &: سند)
حافظه‌ی یک سند را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

متن خطا ErrorText

تابع متن خطا(d: سند، file: رشته): رشته
اولین خطا به شکل file:line:column: message، یا رشته‌ی خالی اگر سند معتبر است. آرگومان اول نامی است که برای پرونده نشان داده می‌شود.
net-httpd-conf-Errors.salam
واردسازی شبکه.سرور وب.پیکربندی وب

تابع نشان‌بده(متن: رشته):
    د := پیکربندی وب.تجزیه(متن)
    سرچاپ د.درست است، پیکربندی وب.متن خطا(د، "web.salam")، د.پیام خطا، د.خط خطا، د.ستون خطا
    پیکربندی وب.آزاد سازی(د)
پایان

تابع ریشه:
    نشان‌بده("server:\n    site:\n")
    نشان‌بده("server:\nend\nend\n")
    نشان‌بده("listen = \n")
    نشان‌بده("names = \"open\n")
    نشان‌بده("listen 80\n")
    نشان‌بده("a = 1 # no\n")
    نشان‌بده("ok = 1\n")
پایان
خروجیfalse web.salam:3:1: missing 'end' for the block opened on line 2 missing 'end' for the block opened on line 2 3 1 false web.salam:3:1: 'end' without a matching block 'end' without a matching block 3 1 false web.salam:1:8: expected a value after '=' expected a value after '=' 1 8 false web.salam:1:9: unterminated string unterminated string 1 9 false web.salam:1:8: expected '=' or ':' after 'listen' expected '=' or ':' after 'listen' 1 8 false web.salam:1:7: unexpected character '#' unexpected character '#' 1 7 true 0 0

نام Name

تابع نام(d: سند، node: صحیح): رشته
نام یک گره: واژه‌هایش با یک فاصله به هم چسبیده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

گره ریشه Root

تابع گره ریشه(): صحیح
شماره‌ی گره‌ی ریشه، که ۰ است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

شمار فرزندان Count

تابع شمار فرزندان(d: سند، node: صحیح): صحیح
شمار فرزندان یک بلوک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

فرزند شماره ChildAt

تابع فرزند شماره(d: سند، node: صحیح، i: صحیح): صحیح
شماره‌ی گره‌ی فرزندی در یک جایگاه، با شماره‌گذاری از ۰.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

یافتن فرزند Find

تابع یافتن فرزند(d: سند، node: صحیح، name: رشته): صحیح
شماره‌ی گره‌ی اولین فرزند یک گره با نامی مشخص، یا ‎-۱.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam

متن مقدار گره ValueText

تابع متن مقدار گره(d: سند، node: صحیح، i: صحیح): رشته
متن مقداری در یک جایگاه از یک تنظیم.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-httpd-conf-Parse.salam