اینم یه تجربه پراکنده دیگه!
یکی از کارهای متفاوتی که من میکنم اینه که توی لینوکس به زبان c++ برنامه نویسی میکنم. معمولا توی برنامههایی هم که مینویسم نیاز داره که با سوکتهای کار کنم. معمولا هم کارها طوریه که معمولا دسترسی به سوکت مهمه. من گشتم و یه سری کتابخانه برای اینکار پیدا کردم. به نظرم جالب بود که اینلیست این کتابخانه ها رو اینجا بگم.
قبل از معرفی بگم چرا به این دست کتابخانهها نیازه. اولا اگه تجربه کار با سوکتها رو داشته باشید میدونید در مجموع کار کردن با سوکتها سخته. اولا اینکه برای ایجاد یک اتصال نیاز به انجام مقدماتی هست (مثلا تبدیل آی پی به یه قالب خاص یا تبدیل نام سایت به آی پی) همچنین یه سوکت در c++ حالتهای گوناگونی داره که کار کردن و هندل کردن تمام این حالتها معمولا کار سختیه. نکته بعدی اینه که روند کار با سوکت توی ویندوز، لینوکس و سایر سیستم عامل ها متفاوت و نوشتن یه کد potable کار سخت تریه. پس معقوله شما با دادن یه هزینه معقول در زمینه کارایی و سایز کد نرمافزار، سطح بالاتر با سوکت سر و کله بزنی!
لیست این کتابخانههای اینا هستن:
- Boost.Asio: این کتابخانه یه کتابخانه سریع و خوب برای کار با سوکتهاست و شما به سوکت بصورت مستقیم دسترسی داری
- ACE: از دل دانشگاه در اومده و به نظر خوب میاد. سوکتها بصورت مستقیم در دسترس هستند اما عملیاتهای سطح بالاتر مثل message routing رو پشتیبانی میکنه
- C++ Network Library: تا اونجایی که نمونههای و مستنداتش رو بررسی کردم این کتابخانه برای کارهای سطح بالا تر مثل http نوشته شده
- POCO: این کتابخانه مجموعه ای از ابزارهای سطح بالا برای برنامه نویسی در اختیار شما قرار میده که شبکه و سوکتهای یکی از اونهاست
- Qt: این کتابخانه هم مجموعه بسیار بزرگی از ابزارها داره که یکی از اونها شبکه و سوکت هست
- Raknet: یه کتابخانه کار با شبکه است که هم توی pc و هم توی کنسولهای بازی کاربرد داره
- ZeroMQ: این کتابخانه بیشتر از اینکه یه کتابخانه شبکه باشه یه کتابخانه message queue هست که به شما کمک میکنه ارتباط بین چندتا اپلیکیشن رو بصورت قابل اعتمادی ایجاد کنید
- nanomsg: این کتابخانه هم بیشتر به عنوان message queue طراحی شده
- libevent: اصالتا یه سیستم برای پشتیبانی از سیستمهای async هست که در جاهای بسیاری استفاده شده و بخشی از اون هم کارهای شبکه و سوکت رو انجام میده
- Apache APR: یکی دیگر از کتابخانههای عموی با پشتیبانی از سوکت است
- yield: یک کتابخانه نوشتن نرمافزارهای تحت وب است
- wvstreams: یک کتابخانه قدیمی برای کار با شبکه است که سالهاست بروزرسانی نشده
- libcurl: یک کتابخانه بسیار قوی برای کار با پروتکلهای شبکه نه سوکتهاست که بیشتر پروتکلهای معمول رو پشتیبانی میکنه
- libuv: یک کتابخانه برای کار با async IO بوده که از شبکه و سوکت هم پشتیبانی میکنه. جالبه بدونید که توی nodejs هم از این کتابخانه استفاده شده.
- SFML’s Network Module: این کتابخانه هم مثل qt یک کتابخانه چند منظوره است که از سوکتها و شبکه هم پشتیبانی میکنه.
من خودم به شخصه تنها از Boost.Asio استفاده کردم و انشاا… اگه عمری بود بیشتر در مورد این کتابخانه و نمونه کدها و ویژگیهای دیگشون مینویسم.
همین!