وبساکت یک پروتکل ارتباطی دو طرفه کاملا دوپلکس است اجراشونده برروی HTTP است.
برنامههای تحت وب مدرن به شدت برای جریان دادهها و ترافیک ناهمگام از این پروتکل استفاده میکنند.
در این مقاله تفاوت میان HTTP و وبساکت، چگونگی برقراری ارتباطات وبساکت و بررسی پیامهای وبساکت را بررسی خواهیم کرد.
تفاوت وبساکت و HTTP در چیست؟
تعداد زیادی از ارتباطات بین مرورگرهای وب و وبسایتها از طریق HTTP انجام میشود.
در این پروتکل کاربر یک درخواست برای سرور ارسال کرده و پس از آن درصورت برقراری شرایط، سرور پاسخ را ارسال میکند. در حالت عمومی پاسخ سریعا ارسال شده و تراکنش خاتمه مییابد. حتی اگر ارتباط شبکه باز بماند، هر درخواست/پاسخ یک تراکنش جدا محسوب میشود.
برخی از برنامههای تحت وب مدرن از وبساکتها استفاده میکنند.
ارتباطات وبساکت بر روی HTTP اجرا شده و عموما دارای طول عمر بالایی هستند.
پیامها در هر دو جهت و در هر زمانی میتوانند ارسال شوند و ذات این تبادلات تراکنشی نیست. ارتباط ایجاد شده در حالت عادی باز باقی میماند و منتظر زمانی است تا کاربر یا سرور برای ارسال پیام اقدام کنند.
وبساکتها در مواردی که تاخیر کم یا ارسال پیامهای اولیه از طرف سرور مورد نیاز است، مثلا اعلام لحظهای قیمتها در یک وبسایت، مورد استفاده قرار میگیرد.
ارتباطات وبساکت چگونه برقرار میشوند؟
وبساکتها عموما توسط جاوااسکریپت سمت کلاینت، مثلا به صورت زیر ایجاد میشوند:
var ws = new WebSocket("wss://website.com/price");
نکته: پروتکل wss روی یک ارتباط رمز شده TLS و پروتکل ws روی یک ارتباط عادی ایجاد میشود.
برای برقراری ارتباط، مرورگر و سرور یک دستدهی وبساکت روی HTTP انجام میدهند.
درخواست دستدهی از سمت مرورگر بهصورت زیر است:
GET /price HTTP/1.1 Host: website.com Sec-WebSocket-Version: 13 Sec-WebSocket-Key: eFhiyxpiJDLzalvnDi3Y0m== Connection: keep-alive, Upgrade Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2 Upgrade: websocket
اگر سرور درخواست را قبول کند، یک پاسخ دستدهی وبساکت بهصورت زیر ارسال میکند:
HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
در این لحظه ارتباط شبکه باز میماند و میتوان برای ارسال پیامهای وبساکت از هر طرف از آن استفاده کرد.
ویژگیهای پیامهای دستدهی وبساکت عبارت است از:
- سرآیندهای Connection و Upgrade اذعان دارند که این درخواست/پاسخ یک دستدهی وبساکت است.
- سرآیند Sec-WebSocket-Version در درخواست، نسخه پروتکل وبساکتی که کاربر علاقمند به استفاده است را نشان میدهد. این مقدار عموما ۱۳ میباشد.
- سرآیند Sec-WebSocket-Key در درخواست، شامل یک مقدار تصادفی کد شده با Base64 است که باید در هر درخواست دستدهی ایجاد شود.
- سرآیند Sec-WebSocket-Accept در پاسخ، شامل چکیده (Hash) مقدار Sec-WebSocket-Key پیوند با یک رشته موجود در مشخصات پروتکل میباشد. این سرآیند از پاسخهای غلط ناشی از پیکربندی غلط سرور و پراکسیهای کش جلوگیری میکند.
پیامهای وبساکت چگونه هستند؟
زمانی که ارتباط وبساکت ایجاد شد، میتوان پیامها را به صورت ناهمگام در هر دو جهت کاربر و سرور ارسال کرد.
یک پیام ساده از مرورگر با استفاده از یک تکه اسکریپت جاوااسکریپت بهصورت زیر میتواند ارسال شود:
ws.send("Peter Wiener");
اساس پیامهای وبساکت میتوانند هر محتوا و فرمت دادهای داشته باشند. در برنامههای مدرن، معمولا از JSON استفاده میشود.
برای مثال یک برنامه اعلام نرخ لحظهای میتواند پیامی مشابه زیر ارسال کند:
{"pid":"123","price":1230}
به ماهم سربزنید