Skip to content
GitHub

WebSocket ပေါ်ပေါက်လာခြင်းနှင့် ရည်ရွယ်ချက်

အရင်တုန်းက HTTP ကို အသုံးပြုပြီး Real-time လိုမျိုး လုပ်ဆောင်ဖို့ ကြိုးစားခဲ့တဲ့ နည်းလမ်းဟောင်းတွေ (Polling, Long Polling) မှာ အားနည်းချက်တွေ အများကြီး ရှိနေတာကြောင့်၊ WebSocket ဆိုတဲ့ ဆက်သွယ်ရေး Protocol အသစ်တစ်ခု မဖြစ်မနေ ပေါ်ပေါက်လာဖို့ တွန်းအား ဖြစ်စေခဲ့ပါတယ်။

WebSocket ဘယ်အချိန် ဘာကြောင့် ပေါ်လာတာလဲ?

Section titled “WebSocket ဘယ်အချိန် ဘာကြောင့် ပေါ်လာတာလဲ?”

WebSocket ရဲ့ အိုင်ဒီယာကို ၂၀၀၈ ခုနှစ်လောက်မှာ စတင် ဆွေးနွေးခဲ့ကြပြီး၊ ၂၀၁၁ ခုနှစ်မှာတော့ အင်တာနက် နည်းပညာ စံနှုန်း သတ်မှတ်ရေးအဖွဲ့ (IETF) ကနေ တရားဝင် စံတစ်ခု (Standard) အဖြစ် သတ်မှတ် ထုတ်ပြန်ခဲ့ပါတယ်။

ဘာကြောင့်/ဘယ်သူတွေ ဖန်တီးခဲ့လဲ?

Section titled “ဘာကြောင့်/ဘယ်သူတွေ ဖန်တီးခဲ့လဲ?”

Michael Carter နဲ့ Ian Hickson လို နည်းပညာ ပညာရှင်တွေက Website တွေမှာ ချက်ချင်း အပြောင်းအလဲ ရှိတဲ့ ဆက်သွယ်မှု (Real-time Communication) တွေအတွက် ပိုပြီး ထိရောက်တဲ့ နည်းလမ်းတစ်ခု၊ လူတိုင်း အများသုံးနိုင်မယ့် စံတစ်ခု လိုအပ်နေပြီ ဆိုတာကို သိမြင်ပြီး ဒီ WebSocket Protocol ကို စတင် အကောင်အထည်ဖော်ဖို့ ဦးဆောင်ခဲ့ကြတာပါ။

အဓိက ရည်ရွယ်ချက်

Section titled “အဓိက ရည်ရွယ်ချက်”

သူ့ရဲ့ အဓိက ရည်ရွယ်ချက်ကတော့ HTTP ရဲ့ “ကိုယ်က တောင်းဆိုမှ Server က ပြန်ပို့ပေးတဲ့” (Request-Response) ကန့်သတ်ချက်တွေကို အပြည့်အဝ ကျော်လွှားပြီး၊ Client (Browser) နဲ့ Server ကြားမှာ အချက်အလက်တွေကို ချက်ချင်း၊ နှစ်ဖက်စလုံးက စိတ်ကြိုက် အပြန်အလှန် ပို့နိုင်တဲ့ အမြဲတမ်း ဖွင့်ထားတဲ့ ဆက်သွယ်ရေး လမ်းကြောင်းတစ်ခုကို ဖန်တီးပေးဖို့ပဲ ဖြစ်ပါတယ်။

(ဒါကို နည်းပညာ အခေါ်အဝေါ်အရ Low-latency, Full-duplex, Persistent Communication Channel လို့ ခေါ်ပါတယ်)။ ဒါမှသာ Web Application တွေဟာ Chat ခန်းတွေလို၊ Online Game တွေလို ပိုပြီး အသက်ဝင်လာပြီး ကိုယ်လုပ်တာကို ချက်ချင်း (Real-time) တုံ့ပြန်လာနိုင်မှာ ဖြစ်ပါတယ်။

WebSocket ၏ အဓိက ကောင်းကွက်များ

Section titled “WebSocket ၏ အဓိက ကောင်းကွက်များ”

WebSocket ကို အသုံးပြုခြင်းအားဖြင့် Real-time Web Application တွေအတွက် အောက်ပါ ကောင်းကျိုးတွေကို ရရှိစေပါတယ် ခင်ဗျာ။

  • အမြဲတမ်း ဖွင့်ထားတဲ့ ချိတ်ဆက်မှု (Persistent Connection): အစပိုင်း Handshake (စတင် ချိတ်ဆက်ဖို့ အသိအမှတ်ပြုတဲ့ လုပ်ငန်းစဉ်) တစ်ကြိမ် လုပ်ပြီး Connection ဖွင့်လိုက်တာနဲ့ အဲ့ဒီ လမ်းကြောင်းက အမြဲတမ်း ဆက်လက် ဖွင့်ထားပြီးသား ဖြစ်နေပါတယ်။ အချက်အလက် အသစ် ပို့ချင်ယူချင်တိုင်း Connection ကို အသစ် ထပ်ခါထပ်ခါ ပြန်ဖွင့်နေစရာ မလိုတော့ပါဘူး။ (ဖုန်းကြိုးကို စကားပြောနေသရွေ့ အမြဲတမ်း ဖွင့်ထားသလိုမျိုးပါ)။

  • နှစ်ဖက်စလုံး အချိန်မရွေး ပြောဆိုနိုင်ခြင်း (Full-Duplex Communication): HTTP လိုမျိုး ကိုယ်က တောင်းဆိုမှ ပြန်ဖြေတာမျိုး မဟုတ်တော့ဘဲ၊ Client နဲ့ Server နှစ်ခုလုံးဟာ Data တွေကို တစ်ပြိုင်နက်၊ ကိုယ်ပို့ချင်တဲ့ အချိန်မှာ ကိုယ်တိုင် စပြီး အချက်အလက် တွန်းပို့ (Push) လို့ ရပါတယ်။ (ဖုန်းပြောတဲ့အခါ နှစ်ဘက်စလုံး တစ်ပြိုင်တည်း အပြန်အလှန် ပြောလို့ ရသလိုမျိုးပါ)။

  • ချက်ချင်း Update များ ရရှိခြင်း (Low Latency): Server မှာ အချက်အလက် အသစ် (ဥပမာ - Chat Message အသစ် ဝင်လာတာ) ရတာနဲ့၊ ဖွင့်ထားတဲ့ Connection ကနေ Client ဆီကို ချက်ချင်း တိုက်ရိုက် ပို့ပေးနိုင်ပါတယ်။ ဒါကြောင့် အချက်အလက်တွေ ရောက်ရှိတာ အရမ်း မြန်ဆန်ပြီး နှောင့်နှေးမှု (Delay) လုံးဝ နည်းပါးပါတယ်။

  • မလိုအပ်တဲ့ အပိုအလုပ် နည်းခြင်း (Reduced Overhead): HTTP Request/Response တွေလို ခဏခဏ Connection ဖွင့်/ပိတ် လုပ်နေရတာနဲ့စာရင်၊ WebSocket Connection တစ်ခု ဖွင့်ထားပြီးတာနဲ့ အချက်အလက် တစ်ခုချင်းစီ ပို့တဲ့အခါ ပါသွားတဲ့ ထပ်ဆောင်း အချက်အလက် (Headers) တွေက အလွန် နည်းပါးပါတယ်။ ဒါကြောင့် Network ပေါ်မှာ ပို့ရတဲ့ အချက်အလက် (Data) ပမာဏ သက်သာပြီး ပိုပြီး ထိရောက် မြန်ဆန်ပါတယ် ခင်ဗျာ။