Skip to content
GitHub

WebSocket Messaging - Data ပို့ခြင်းနှင့် လက်ခံခြင်း

WebSocket Handshake လုပ်ငန်းစဉ် အောင်မြင်ပြီး Client နဲ့ Server ကြား နှစ်ဖက်သွား ဆက်သွယ်နိုင်တဲ့ လမ်းကြောင်း (Connection) ရရှိသွားပြီ ဆိုတာနဲ့၊ အဲ့ဒီနောက်ပိုင်း အချက်အလက်တွေကို ပို့တဲ့အခါ “Message” အဖြစ် ပို့/ယူ လုပ်ပါတယ်။

Data Message တစ်ခုလုံးက အရမ်း ကြီးနေရင်၊ သူ့ကို သေးငယ်တဲ့ အပိုင်းလေးတွေဖြစ်တဲ့ “Frame” တွေအဖြစ် ခွဲပြီး Network ပေါ်ကနေ ပို့ပါတယ်။ Frame တစ်ခုစီက ပို့လိုက်တဲ့ Data အပိုင်းလေးတွေ ထည့်ထားတဲ့ အိတ် (Packets) လေးတွေနဲ့ တူပါတယ်။

Network frame

Frames တွေ၊ Opcode တွေ နဲ့ Mask လုပ်ခြင်း

Section titled “Frames တွေ၊ Opcode တွေ နဲ့ Mask လုပ်ခြင်း”

Data တွေကို Network ပေါ် ပို့တဲ့အခါ Frames တွေအဖြစ် ထုပ်ပိုးပြီး ပို့ပါတယ်။ Frame တစ်ခုမှာ ထိပ်ပိုင်း အချက်အလက် (Header) နဲ့ တကယ် ပို့လိုက်တဲ့ အချက်အလက် ကိုယ်ထည် (Payload Data) ဆိုပြီး အဓိက ပါဝင်ပါတယ်။

Opcode (အမျိုးအစား ခွဲခြားကုဒ်)

Section titled “Opcode (အမျိုးအစား ခွဲခြားကုဒ်)”

Frame ရဲ့ Header မှာ Opcode ဆိုတဲ့ သီးခြား ကုဒ်တစ်ခု ပါပါတယ်။ ဒီ Opcode က Payload Data (အချက်အလက် ကိုယ်ထည်) ဟာ ဘယ်လို အမျိုးအစားလဲ ဆိုတာကို ဖော်ပြပေးပါတယ်။ ဥပမာ -

  • Text: ပုံမှန် စာသား Message တွေ (Chat စာသား၊ JSON တွေ လိုမျိုး)။
  • Binary: ပုံ၊ အသံ၊ ဗီဒီယို ဖိုင်တွေလိုမျိုး ဒါမှမဟုတ် စာမဟုတ်တဲ့ (Raw) Data တွေ။
  • Connection Close: ချိတ်ဆက်မှုကို အပြီး ဖြတ်တောက်ချင်ကြောင်း အချက်ပြခြင်း။
  • Ping: အခြား တစ်ဖက်က ဆက်သွယ်မှု (Connection) အသက် ရှင်/မရှင် စစ်ဆေးခြင်း (ဥပမာ - လိုင်းကျနေလား Heartbeat စစ်တာ)။
  • Pong: Ping ကို ပြန်လည် ဖြေကြားခြင်း (ဥပမာ - ဟုတ်ကဲ့၊ ချိတ်ဆက်မှု အသက်ရှင်လျက် ရှိပါတယ်လို့ ပြန်ပြောတာ)။

(Frame က စာထည့်ထားတဲ့ စာအိတ်ဆိုရင် Opcode က စာအိတ်ပေါ်မှာ ‘စာသားပါ’, ‘ပုံပါ’, ‘လိုင်းစစ်ခြင်းပါ’ စသဖြင့် အမျိုးအစား တံဆိပ် ကပ်ထားတာနဲ့ တူပါတယ်)

Mask လုပ်ခြင်း (လုံခြုံရေးအတွက်)

Section titled “Mask လုပ်ခြင်း (လုံခြုံရေးအတွက်)”

Client (Browser) ကနေ Server ဆီကို ပို့တဲ့ Message (Frame) တွေကို လုံခြုံရေးအတွက် မဖြစ်မနေ Mask လုပ်ရပါမယ် (ဖုံးကွယ်ရပါမယ်)။

ဒါဟာ ပို့လိုက်တဲ့ Data ကို Network လမ်းကြောင်းမှာ ဖြတ်သန်းနေစဉ် အတွင်း (ဥပမာ - ကြားခံ Proxy တွေကနေ) တခြားသူတွေ အလွယ်တကူ ကြည့်လို့ မရအောင်၊ ဒါမှမဟုတ် မတော်တဆ ပြောင်းလဲသွားတာမျိုး မဖြစ်အောင် (Cache poisoning attacks တွေကို) ကာကွယ်တဲ့ လုံခြုံရေး နည်းလမ်းလေး တစ်ခုပါ။ Server က ဒီ Mask လုပ်ထားတာကို ရရှိတဲ့အခါ ဘယ်လို ပြန်ဖြည် (Unmask) ရမလဲ ဆိုတာ သိပါတယ်။ (Server ကနေ Client ကို ပို့တဲ့ Frames တွေကိုတော့ Mask လုပ်စရာ မလိုပါဘူး)။

ဆက်လက် လေ့လာမည့် Code Examples

Section titled “ဆက်လက် လေ့လာမည့် Code Examples”

ဒီ အချက်အလက် ပို့/ယူ လုပ်တာတွေ၊ Connection ဆောက်တာတွေ လက်တွေ့မှာ ဘယ်လို အလုပ်လုပ်လဲ ဆိုတာ ပိုပြီး နားလည်ဖို့အတွက် နောက် သင်ခန်းစာတွေမှာ Real-world Code Examples တွေနဲ့ ဆက်လက် လေ့လာကြပါမယ် ခင်ဗျာ။