مروری کوتاه بر WebSocket

WebSocket یک پروتکل ارتباطی full-duplex (دو طرفه) است که از طریق یک ارتباط TCPکار خود را انجام می دهد.این پروتکل در  IETFاستاندارد سازی شده است.

websocket-architecture

WebSocket برای پیاده سازی در  web browsers وweb servers ها طراحی شده است.ولی می تواند بوسیله هر برنامه تحت کلاینت و یا تحت سروری پیاده سازی شود.

بسیاری از افراد گمان میکنند که WebSocket روی پروتکلHTTP کار می کند.ولی تنها ارتباط آن با HTTP در فرایند handshake است که بوسیله سرور یک  Upgrade request تفسیر می شود.

Upgrade header در HTTP/1.1 برای ارتقا پروتکل و همچنین برای تعویض پروتکل از Http به پروتکل دیگر معرفی شد.

در واقع وب ساکت از این قابلیت برای باز کردن یک کانال ارتباطی استفاده می کند.

از WebSocket در مکان هایی مثل جاهایی که نیاز است تعامل زیادی بین مرورگر و وبسایت انجام شود استفاده می شود.این پروتکل امکان ارسال داده از سمت سرور به کلاینت را بدون درخواست از سمت کلاینت فراهم می کند و همچنین می تواند از طریق همان ارتباط پیام ها را در دو جهت رد و بدل کند.تمامی ارتباطات روی پروتکلTCP و روی پورت ۸۰ انجام می شوند.این کار باعث می شود که در صورتی فایروالی موجود بود که ارتباطات غیر اینترنتی را مسدود می کرد نتواند WebSocket را مسدود کند.

این پروتکل توسط اکثریت مرورگرها مثل Google Chrome, Internet Explorer,Firefox, Safari و Opera پشتیبانی می شود.قبل از websocket از Comet برای ارتباط full-duplex استفاده می شد که سر بارهای ناشی از هدر های HTTP در آن وجود داشت.

برای باز کردن یک کانال ارتباطی از طریق وب ساکت ابتدا نیاز است که درخواستی مثل درخواست زیر ارسال شود:


GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

همانطور که مشاهده می کنید دو هدر در این درخواست موجود است که مشخص کننده این است که پروتکل می بایست Upgrade شود:Upgrade: websocketو  Connection: Upgrade

در جواب درخواست بالا سرور جواب زیر را خواهد داد:


HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

فیلد هایی در هدر وجود دارند که دیگر با پروتکل WebSocket همخوانی ندارند.علاوه بر این موضوع وب ساکت از یک اسکیما جدید برای برقراری ارتباط استفاده میکند.

ws برای داده هایی که رمز نگاری نشده اند.

wss:برای داده هایی که رمز نگاری شده اند.

برای دیدن نمونه هایی از این پروتکل می توانید به این آدرس مراجعه کنید.