Tornado یک فریمورک اپنسورس برای توسعۀ وب اپلیکیشن با زبان برنامهنویسی پایتون است و همچنین ماژولی برای انتقال دیتا در شبکههای به اصطلاح Asynchronous (غیرهمزمان) دارا است که این ماژول به منظور جلوگیری به عمل آوردن از اختصاص تایم زیاد به منظور دریافت ریسپانس از سمت سرور در شبکههایی که به محض دریافت چندین I/O همزمان برخی از ریکوئستها را بلاک نمیکنند دارابوده به طوری که قابلیت اِسکِیل شدن برای استفاده در دهها کانکشن طولانی مدت را داشته، به علاوه اینکه برای ارتباطات به اصطلاح Long Polling، WebSocket و همچنین اپلیکیشنهایی که نیاز به یک ارتباط طولانی مدتِ لایو (زنده) برای هر کاربر دارند، یک گزینۀ ایدهآل برای توسعۀ وب محسوب میشود.
Tornado متفاوت از دیگر وب فریمورکهای زبان پایتون است چرا که توسعۀ آن مبتنی بر استاندارد WSGI نبوده و اپلیکیشنهای توسعۀ یافته با این فریمورک معمولاً در هر پراسِس توسط یک به اصطلاح تِرِد اجرا میشوند (WSGI مخفف عبارت Web Server Gateway Interface بوده و به منزلهٔ استانداردی است که نحوۀ ارتباط یک وبسرور با وب اپلیکیشنها و همچنین چگونگی اتصال وب اپلیکیشنها با یکدیگر به منظور پردازش یک ریکوئست را تشریح میکند.) به عنوان مثال، برنامهٔ معروف Hello World با این فریمورک به صورت زیر نوشته خواهد شد:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
لازم به ذکر است با وجود اینکه ماژول tornado.wsgi در این فریمورک برخی از قابلیتهای استاندارد WSGI را ساپورت میکند، اما هرگز بدین معنی نیست که دولوپرها برای توسعۀ وب اپلیکیشن میتوانند به صورت متمرکز از این فریمورک استفاده کنند؛ به عبارت دیگر، دولوپرها چنانچه بخواهند به جای استفاده از استاندارد WSGI مستقیماً از اینترفیس Tornado برای توسعهٔ نرمافزار استفاده کنند، بایستی اپلیکیشنهای زیادی را توسعه دهند.
Tornado از چه سیستمعاملهایی پشتیبانی میکند؟
گرچه این فریمورک در سیستمعامل ویندوز نیز اجرا میشود، اما پیکربندی آن به طور رسمی توسط این پلتفرم پشتیبانی نمیشود و استفاده از ویندوز صرفاً به عنوان یک محیط به اصطلاح Development (توسعه) مناسب بوده و فریمورک تورنادو در پلتفرمهای Unix-Like بهترین قابلیت اجرا را داشته و این در حالی است که برای دیپلوی محصولات توسعهیافته با این فریمورک و به منظور برخورداری از پرفورمنس بالا و مقیاسپذیری آنها، سیستمعاملهایی همچون Linux و BSD گزینههای مناسبی هستند.
آشنایی با کامپوننتهای اصلی فریمورک Tornado
به طور کلی، فریمورک تورنادو را میتوان به چهار کامپوننت اصلی تقسیم کرد که عبارتند از:
- یک وب فریمورک که شامل یک به اصطلاح Base Class تحت عنوان RequestHandler است که برای توسعۀ وب اپلیکیشنها میتوان از کلاسهای زیرشاخۀ آن استفاده کرد (همچنین کلاس RequestHandler سایر کلاسهای این فریمورک را نیز ساپورت میکند.)
- پروتکلهایی تحت عنوان HTTPServer و AsyncHTTPClient که نسخۀ پیادهسازی شدۀ پروتکل HTTP هم در سمت سرور و هم در سمت کلاینت هستند.
- ماژولی برای انتقال دیتا در شبکههای اصطلاحاً Asynchronous که این ماژول کلاسهایی از جمله IOLoop و IOStream را دارا است و به عنوان سرویسی برای ساخت کامپوننتهای مرتبط با پروتکل HTTP عمل میکند (همچنین میتوان از آن برای پیادهسازی سایر پروتکلها نیز استفاده کرد.)
- Tornado ماژولی تحت عنوان tornado.gen دارا است که این امکان را برای دولوپرها فراهم میکند تا ایشان برای نوشتن کدهایی با قابلیت اجرای Asynchronous، به جای استفاده از روشهای سختی مانند اتصال چندین تابع Callback به یکدیگر، از این ماژول استفاده کنند.
در پایان بایستی گفت که این فریمورک یکی از کامپوننتهای پکیج PyPI است و به راحتی با استفاده از دستور pip نصب میشود:
$ pip install tornado
همچنین لازم به ذکر است که تورنادو روی هر دو نسخهٔ پایتون (2.7 و 3.4 به بالا) قابلاجرا است.