آموزش فریمورک Tornado - قسمت سوم - شمای کلی Tornado
در این قسمت شمای کلی فریمورک تورنادو را بررسی میکنیم و با ماژولهای مختلف فریمورک بیشتر آشنا میشویم. چنانچه سوالی داشتید در پایین همین تاپیک بپرسید.
WebFramework
در این قسمت دربارهی ماژولهای تورنادو صحبت میکنیم. تورنادو ماژولهای مختلفی دارد. در قسمت قبلی با ماژولهای web و ioloop آشنا شدیم. تورنادو از چهار بخش اصلی و دو بخش متفرقه تشکیل شده است. اولین بخش web framework تورنادو است که شش ماژول دارد. web همان ماژولی است که در قسمت قبل کلاسهای RequestHandler و Application را از آن ایمپورت کردیم. template همانطور که از اسمش پیداست مسئول پردازش تمپلیتهاست. تورنادو تمپلیت انجین مخصوص خود را دارد که خیلی سبک و قدرتمند است ولی امکان استفاده از تمپلیت انجینهای دیگر مانند Jinja و Mako به عنوان دیفالت تمپلیت انجین وجود دارد. ماژول بعدی routing است که کار روتینگ و پردازش urlpattern(URLSpec) ها را برعهده دارد. وظیفه ماژول locale پشتیبانی از internationalization است.برای پردازش وبسوکتها و مدیریت ارتباطات مانای دوطرفه از ماژول websocket استفاده میشود.
HTTP Servers and Clients
بخش بعدی تورنادو، کلاینتها و سرورهای http تورنادو هستند. ماژول httpserver یک non-blocking اچتیتیپی سرور است. بیشتر معروفیت تورنادو به خاطر همین سرور است. این سرور میتواند به صورت standalone نیز استفاده شود.ماژول httpclient یک کلاینت ناهمروند در اختیار ما قرار میدهد. اصولا در تورنادو هر جا که با کلاینت برخورد داشته باشیم، منظور async client است و هر جا که با سرور برخورد داشته باشیم،منظور non-blocking server است. در ماژول httputil یوتیلیتیهایی برای دستکاری و تغییر requestها و responseها و البته headerها وجود دارد البته برای تغییر موارد مذکور نیازی به ایمپورت کردن این ماژول نیست چرا که تمام ابزارهای مورد نیاز در کلاس RequestHandler قرار گرفته است. مثلا برای اضافه کردن هدر به یک ریسپانس میتوانیم کلاس HTTPHeaders از ماژول httputil را ایمپورت کنیم ولی راه بهتر استفاده از متدهای set_header و add_header در کلاس ویو است. ماژول http1connection یک پیادهسازی کلاینت/سرور از http 1.x به ما ارائه میدهد.
Asynchronous Networking
ioloop همان ایونت لوپ معروف تورنادو است. این لوپ و سرور غیر مسدودشونده تورنادو اصلیترین و مهمترین ماژولهای تورنادو هستند. ماژول iostream مسئول ایجاد یک non-blocking سوکت است. ماژول tcpclient یک tcp کلاینت ناهمروند میسازد و tcpserver یک tcp سرور غیرمسدودشونده(non-blocking). نکته حائز اهمیت ارثبری کلاس HTTPServer ماژول httpserver از کلاس TCPServer ماژول tcpserver و همچنین ارثبری کلاس AsyncHTTPClient ماژول httpclient از کلاس TCPClient ماژول tcpclient است. یوتیلیتیهای مختلف شبکه در ماژول netutil قرار میگیرند.
Coroutines and Concurrency
ماژول gen مسئول ایجاد کروتینهای generator-base است. تورنادو را میتوان یکی از پیشگامان ناهمروندی دانست. قبل از به وجود آمدن کتابخانهی asyncio، تورنادو روشهایی پیشگام برای ناهمروندی ارائه داده بود. ماژول locks برای مدیریت لاکها ایجاد شده است. در ماژول queues امکان قرار دادن کروتینها در یک صف اجرا وجود دارد. با ماژول process میتوان پراسسهای را مدیریت و پردازش کرد.
Integration with Other Services
اگر به صفحه لاگین بعضی از وبسایتها دقت کرده باشید، علاوه بر لاگین از طریق نامکاربری و رمزعبور، لاگین از طریق سرویسهای شخصثالث مانند جیمیل، فیسبوک، توییتر و ... نیز وجود دارد. ماژول auth کار لاگین از طریق سرویسهای شخص ثالث را با استفاده از OpenID و OAuth انجام میدهد. ماژول wsgi مانند پلی بین تورنادو و فریمورکهای wsgi عمل میکند. در صورتی که بخواهیم یک wsgi app را از طریق سرور غیرمسدودشونده تورنادو اجرا کنیم، این ماژول این امکان را برای ما فراهم میکند. البته برای اجرای اپهای wsgi همروند(sync) بر روی سرور ناهمروند(async) تورنادو باید دلیل کافی داشته باشید! ماژول platform پلی است بین تورنادو و سایر پلتفرمهای ناهمروند دیگر مانند twisted و asyncio.
Utilities
ماژول autoreload تغییرات در سورس کد را تشخیص داده و سرور را ریستارت میکند و معمولا در زمان توسعه اپلیکیشن استفاده میشود. البته یک فلگ autoreload در تنظیمات تورنادو وجود دارد که کار مشابهی را انجام میدهد با یک تفاوت! اگر از فلگ autoreload استفاده کنید و در هنگام تغییر در سورس کد با syntax error برخورد کند، سرور اصطلاحا Down میشود اما استفاده از ماژول autoreload منجر به آن میشود که حتی در صورتی که تغییر در سورس کد منتهی به syntax error شود، سرور Down نمیشود. ماژول concurrent امکان کار با اشیاء Future را فراهم میکند. ماژول log تقریبا شبیه ماژول توکار logging پایتون عمل میکند و برای کار با لاگها و مدیریت آنها استفاده می شود. options ماژولی مانند ماژول توکار argparse یا کتابخانه click از مجموعه pallets projects است که وظیفه مدیریت و پردازش آرگومانهای خطفرمان یا همان command line arguments را برعهده دارد. ماژول testing برای انجام تست اپلیکیشنهای ناهمروند تورنادویی استفاده میشود و در نهایت توسعهدهندگان محترم تورنادو مجموعهای از یوتیلیتیهای به دردبخور را در ماژول util قرار دادهاند.