در دنیای شبکه پروتکلهای مختلفی برای ایجاد ارتباط بین مرورگر کاربر و سرور وجود دارد که معمولا در نحوه عملکرد، امنیت و سرعت انتقال دادهها با یکدیگر تفاوت دارند. یکی از مطرحترین پروتکلها که ارتباط دوطرفه و در لحظه بین کلاینت و سرور ایجاد میکند، وب سوکت (WebSocket) نام دارد. در این مقاله قصد داریم به زبان ساده به سوال وب سوکت چیست پاسخ دهیم و مزایا، کاربردها و نحوه عملکرد آن را بررسی کنیم. به خواندن مطلب پیش رو ادامه دهید تا با پروتکل سریع و امن وب سوکت آشنا شوید.
وب سوکت (WebSocket) چیست؟
وب سوکت (WebSocket) یک پروتکل مبتنی بر TCP است که برای ارتباط بین مرورگر کاربر و سرور به کار میرود. داخل یک اتصال WebSocket کلاینت و مبدا میتوانند دادهها را بدون نیاز به برقراری مجدد جلسات (Sessions) ارسال کنند. به همین خاطر سرعت تبادل دادهها با استفاده از پروتکل وب سوکت بسیار سریع است و این اتصالها اغلب برای اپلیکیشنهای بلادرنگ (Realtime) مانند پیامرسانها و بازیهای آنلاین کاربردی هستند.
پروتکل وب سوکت به برنامهنویسان اجازه میدهد تا بهصورت دو طرفه (Full-Duplex) و بدون نیاز به انجام درخواستهای مجدد، دادههایی را بین مرورگر و سرور انتقال دهند. WebSocket در تمام مرورگرهای مدرن پشتیبانی میشود و از اساسیترین و پایهایترین فناوریهای ارتباطات در زمینه توسعه برنامههای وب به شمار میرود.
پشتیبانی از وب سوکت یکی از مهمترین مواردی است که هنگام خرید CDN باید به آن توجه داشته باشید. سرویسهای CDN ابر دراک با پشتیبانی از وب سوکت ارتباط دوطرفه و پایداری برای کاربران به ارمغان میآورند.
WebSocket چگونه کار میکند؟
حالا که به سوال «وب سوکت چیست» پاسخ دادیم و با ماهیت این پروتکل آشنا شدیم، بهتر است به بررسی نحوه عملکرد آن بپردازیم. WebSocket یک پروتکل مستقل مبتنی بر TCP است که کانالهای ارتباطی دو طرفه (Full-duplex) را از طریق اتصال TCP فراهم میکند. اتصالی که از طریق وب سوکت برقرار میشود، تفاوتهایی با HTTP دارد؛ در HTTP برای هر درخواست، یک اتصال جدید برقرار میشود.
برای ایجاد یک اتصال WebSocket کلاینت یک درخواست معمولی HTTP ارسال میکند. سپس سرور میتواند فرایند Handshake را کامل کند. اتصال وب سوکت بهصورت باز باقی میماند و کلاینت یا سرور میتوانند فریمهای داده را بدون نیاز به ایجاد اتصالات جدید برای هر بار به یکدیگر ارسال کنند.
بهطور پیشفرض، پروتکل وب سوکت از پورت 80 برای اتصالات وب سوکت معمولی (Regular) و پورت 443 برای اتصالات وب سوکت از طریق TLS/SSL استفاده میکند. در حال حاضر وب سوکت در بیشتر مرورگرهای اصلی از جمله گوگل کروم، فایرفاکس، سافاری و اوپرا پشتیبانی میشود.
آشنایی دقیقتر با نحوه برقراری اتصال وب سوکت
وقتی که ارتباط WebSocket بین مرورگر و سرور برقرار میشود، ابتدا مرورگر یک درخواست handshake به سرور ارسال میکند. این handshake شامل یک header است که یک کلید رمزنگاریشده دارد. سرور پس از دریافت این درخواست، یک پاسخ handshake ارسال میکند که شامل یک کلید رمزنگاری دیگر است. سپس مرورگر و سرور از این کلیدها برای رمزنگاری و رمزگشایی دادههای ارسالی و دریافتی استفاده میکنند.
پس از برقراری اتصال، WebSocket از یک پروتکل Message-oriented استفاده میکند. بهعنوان مثال، در WebSocket یک پیام بهصورت یک فریم ارسال میشود. این فریم شامل اطلاعاتی مانند نوع پیام، طول پیام و دادههای آن است. سپس سرور این فریم را دریافت کرده و پردازش میکند.
ازآنجاییکه WebSocket از یک اتصال دائمی و بدون وقفه استفاده میکند، نیازی به ارسال مکرر درخواست به سرور نیست و این باعث کاهش ترافیک شبکه و تاخیر در ارسال و دریافت دادهها میشود. همچنین وب سوکت این امکان را به توسعهدهندگان میدهد که دادههای زنده مانند ویدئو و صدا را بهصورت پویا در برنامههای وب پخش کنند.
تفاوت HTTP با Websocket چیست؟
HTTP یک پروتکل request-response و یکطرفه است؛ درحالیکه وب سوکت یک پروتکل دوطرفه محسوب میشود که بهصورت real-time بین مرورگر و سرور ارتباط برقرار میکند. همچنین در HTTP درخواستها بهصورت یکطرفه بین مرورگر و سرور منتقل میشوند و پس از ارسال درخواست، مرورگر منتظر پاسخ از سرور میماند. اما در وبسوکت ارتباط بین مرورگر و سرور بهصورت real-time و دوطرفه است و دادهها بین دو طرف بهصورت مستقیم و بدون نیاز به ارسال درخواست انتقال مییابند.
اگر قصد خرید CDN ایرانی با پشتیبانی از وب سوکت را دارید، پیشنهاد میکنیم در صفحه قیمت CDN ابر دراک به بررسی مشخصات فنی و قیمت پلنهای مختلف یکی از بهترین CDNهای ایران بپردازید.
شیوه استفاده از Web Socket
برای استفاده از WebSocket، برنامهنویسان باید از API مربوط به WebSocket استفاده کنند. با استفاده از این API، برنامهنویسان میتوانند بهراحتی بین مرورگر و سرور ارتباط برقرار کنند و دادههای خود را بهصورت پایدار انتقال دهند. همچنین، WebSocket برای برنامهنویسان امکاناتی مانند ارسال پیامها بهصورت مستقیم، برقراری ارتباط بین چندین کاربر و همگامسازی دادهها را فراهم میکند.
توصیه میکنیم برای آشنایی بیشتر با نحوه استفاده از وب سوکت در CDN، مقاله «درباره شبکه توزیع محتوا بیشتر بدانید» را با دقت مطالعه کنید.
مزایای استفاده از WebSocket
استفاده از WebSocket به بسیاری از برنامههای وب اجازه میدهد که بهصورت دائمی و بدون وقفه با سرور ارتباط برقرار کنند. این پروتکل میتواند برای انتقال دادههای زنده مانند ویدئو و صدا، پویایی در برنامههای وب، بازیهای چندنفره آنلاین و برقراری ارتباط بین برنامههای کاربردی مختلف استفاده شود. استفاده از وب سوکت مزایای زیادی به همراه دارد که در ادامه تعدادی از آنها را توضیح میدهیم:
کاهش تعداد درخواستهای مجدد
با استفاده از وب سوکت، برنامهنویسان میتوانند دادههای خود را بهصورت دائمی بین مرورگر و سرور منتقل کنند؛ در نتیجه تعداد درخواستهای مجدد برای دریافت دادهها به حداقل ممکن میرسد.
کاهش ترافیک شبکه
در HTTP برای هر درخواست، یک اتصال جدید برقرار میشود؛ اما با استفاده از وب سوکت نیازی به برقراری اتصال جدید برای هر درخواست نیست. این امر باعث کاهش ترافیک شبکه و کاهش تاخیر در ارسال و دریافت دادهها میشود.
ارتباط دوطرفه
WebSocket به برنامهنویسان اجازه میدهد تا دادهها را بهصورت دوطرفه بین مرورگر و سرور ارسال کنند و در نتیجه برنامههای کاربردی وب تعاملیتر و پویاتر میشوند.
کاهش تأخیر
استفاده از WebSocket به توسعهدهندگان اجازه میدهد که ارتباط بین مرورگر و سرور را با استفاده از یک اتصال دائمی و بدون وقفه برقرار کنند. این اتصال دائمی میتواند به کاهش تاخیر و بهبود کارایی برنامههای وب کمک کند.
در مقایسه با HTTP که بهصورت دوطرفه عمل نمیکند و برای هر درخواست، پاسخی از سمت سرور دریافت میکند، وب سوکت به صورت دوطرفه (Full-Duplex) عمل میکند. این بدین معناست که اگر سرور دادهای را به مرورگر ارسال کند، مرورگر میتواند بدون ارسال درخواست دوباره، پاسخ خود را به سرور ارسال کرده و دادههای جدید را دریافت کند. این قابلیت باعث میشود که کارایی و سرعت برنامههای وب بهبود یافته و تاخیر کاهش یابد.
پشتیبانی از cross-domain
در برخی از موارد، WebSocket به توسعهدهندگان اجازه میدهد تا ارتباط بین برنامههای وب را از دامنههای مختلف برقرار کنند که این قابلیت برای پروژههای بزرگ و پیچیده مفید است.
افزایش سرعت و کارایی برنامه
با استفاده از WebSocket، برنامهها میتوانند بهصورت real-time با کاربران ارتباط برقرار کنند و بهسرعت برای پاسخ به تغییرات و درخواستهای کاربران واکنش نشان دهند. این ویژگی میتواند به بهبود کارایی و سرعت برنامه کمک کند.
پشتیبانی از برنامههای چندگانه
وب سوکت به توسعهدهندگان اجازه میدهد که برنامههایی را برای هماهنگی و همزمانسازی اطلاعات و ارسال دادههای real-time بین چندین دستگاه یا برنامه استفاده کنند. بهطور خاص، پشتیبانی از برنامههای چندگانه در WebSocket به معنای این است که برنامهها بهصورت همزمان و بدون تأخیر، از یک اتصال مشترک WebSocket برای ارسال و دریافت دادهها استفاده میکنند.
امکان مدیریت و پشتیبانی از بار کاری بالا
سرور با استفاده از وب سوکت میتواند برای پاسخ به درخواستهای بسیاری از کاربران در همان زمان، از یک اتصال مشترک WebSocket استفاده کند. این قابلیت به بهبود مدیریت و پشتیبانی از بار کاری بالا در سرور کمک خواهد کرد.
کاهش مصرف منابع
با استفاده از WebSocket، مصرف منابع سرور و مرورگر مانند حجم حافظه و پردازنده کاهش مییابد. بهعنوان مثال، در HTTP برای هر درخواست، یک اتصال جدید برقرار میشود که میتواند به هدر رفتن منابع سرور منجر شود؛ اما با استفاده از WebSocket، نیازی به اتصال جدید برای هر درخواست نیست؛ بنابراین مصرف منابع سرور و مرورگر کاهش مییابد.
امنیت بالا
WebSocket از SSL/TLS برای رمزنگاری دادههای ارسالی و دریافتی استفاده میکند که امنیت بالایی را در ارتباطات بین مرورگر و سرور ایجاد میکند. در نهایت، باید به این نکته اشاره کنیم که برای استفاده از Web Socket در برنامههای تحت وب، باید سرور و مرورگر از این پروتکل پشتیبانی کنند. برای مثال، برنامههای تحت وبی که از Node.js در سمت سرور استفاده میکنند، بهراحتی میتوانند از وب سوکت بهره ببرند. همچنین مرورگرهای مدرنی که از HTML5 پشتیبانی میکنند، بهصورت پیشفرض از وب سوکت پشتیبانی میکنند.
در نتیجه، Web Socket یک پروتکل بسیار کارآمد و مفید برای برنامههای تحت وب است. با استفاده از این پروتکل، میتوانید یک ارتباط دوطرفه و دائمی بین مرورگر و سرور برقرار کنید و بهراحتی اطلاعات با حجم بالا را ارسال کنید. همچنین، Websocket برای برنامههایی که نیاز به چت آنلاین دارند، بسیار مناسب است و به دلیل سرعت و کارآمدی بالای خود، در بسیاری از برنامههای تحت وب مورد استفاده قرار میگیرد.
محدودیتهای وب سوکت
گاهی اوقات ممکن است درخواست ارتقای وب سوکت رد شده و اتصالات وب سوکت موجود به دلایل مختلف قطع شوند. همچنین نمیتوان تضمین کرد که وب سوکت در همه موقعیتها بهدرستی بسته شود؛ زیرا پروکسی از فریمهای وب سوکت آگاه نیست و اتصال TCP درصورت بسته شدن هرکدام از endها بسته خواهد شد.
تعداد کلاینتهایی که میتوانند همزمان از طریق وب سوکت به مبدا مشتری متصل شوند، محدود است و قابلیت تنظیم ندارد.
وب سوکت فقط روی کلاینتهای پشتیبانی، جعبههای میانی (Middle boxes) و سرورهای مبدا در دسترس است. ازآنجاییکه وب سوکت یک پروتکل شخص ثالث محسوب میشود، CDN مورد استفاده هیچگونه مسئولیتی در قبال باگ، آسیبپذیریهای امنیتی یا مشکلات عملکردی در طراحی یا پیادهسازی آن نخواهد داشت.
مهمترین نکات برای استفاده از وب سوکت
همواره وب سوکتها را فقط برای URL مورد نیاز فعال کنید؛ نه برای کل پیکربندی. همچنین برای جلوگیری از مشکلات غیرمنتظره هنگام استفاده از وب سوکتها توصیه میکنیم هدرهای زیر را در Request policy مبدا قرار دهید:
- Sec-WebSocket-Key
- Sec-WebSocket-Version
- Sec-WebSocket-Protocol
- Sec-WebSocket-Accept
- Sec-WebSocket-Extensions
منابع: Akamai / AWS / Cloudflare