Real-time web applications

အခုအချိန်မှာ real-time web applications ဆိုတာက မြန်မာနိုင်ငံနဲ့ အလှမ်းကွာသေးပေမယ့် သိသင့်ပါတယ်။ အထူးသဖြင့် google doc က အကောင်းဆုံး real-time web applications ပါပဲ။ ဒီဘက်က စာရိုက်လိုက်တာနဲ့ ဟိုဘက်မှာ ချက်ခြင်း သွားပေါ်တယ်။ Real-time web applications က chat လိုမျိုး web applications တွေမှာ တော်တော်ကို အသုံးဝင်ပါတယ်။ real time chatting ပေါ့ဗျာ။ သာမာန် သမာရိုးကျ နည်းလမ်းက ဟိုးအရင်တုန်းကတော့ iframe သုံးပြီး refresh ကို ၅ စက္ကန့် တစ်ကြိမ် လုပ်ကြတယ်။ နောက်ပိုင်း ajax ပေါ်လာတော့ iframe အစား ajax နဲ့ ၅ စက္ကန့် တစ်ခါ refresh လုပ်ရပြန်တယ်။

refresh လုပ်တဲ့အခါ server ကို request လုပ်တယ်။ server က  database ကို request ထပ်လုပ်တယ်။ ပြီးတော့ data တွေထုတ်ပြီး database ကနေ server ကို ပြန်ပို့တယ်။  server က user ဆီ ပြန်ပို့တယ်။ ဒါက သမာရိုးကျ နည်းလမ်းပေါ့။ ဒီနည်းလမ်းက အလုပ်တွေ အဆင့်ဆင့်လုပ်နေရတယ်။ database ကို ခဏခဏ request လုပ်နေရတယ်။ နောက်ပြီး Real Time မဖြစ်ဘူးပေါ့။ ( အခု အချိန်ထိ real time အစစ်အမှန် မရသေးပါ ) real time လောက်နီးပါး ရအောင် အတွက် web socket ကို ဖန်တီးလာပါတယ်။ HTML 5 မှာလည်း websocket ကို စတင်ပြီး support လုပ်လိုက်ပါတယ်။ websocket , comet စတာတွေကို အသုံးပြုပြီး realtime ကို လုပ်လို့ရတယ်။ ဘယ်လိုလဲဆိုတော့ server က request ရပြီဆိုတာနဲ့ ပြန်ပြီး broadcast လုပ်ပေးတယ်။ message ပို့လိုက်တယ်။ အဲဒီ message ကို server နဲ့ connect လုပ်ထားတဲ့ web browser တွေဆီကို ပြန်ပို့လိုက်တယ်။ database ဆီသွားမနေတော့ဘူး။  web browser က message ရပြီဆိုတာနဲ့ message ပေါ်မှာ ခွဲခြမ်းစိတ်ဖြာပြီးတော့ အလုပ်လုပ်ပေးတယ်။ အများအားဖြင့် message passing ကိုတော့ JSON ကို အသုံးပြုကြတယ်။ database ရဲ့ လုပ်ဆောင်မှုတွေကို လျော့ချနိုင်တဲ့အတွက်ကြောင့် ပိုပြီး မြန်ဆန်လာတယ်။

WebSockets ဆိုတာ ဘာလဲ

websockets ဆိုတာကတော့ TCP socket ပေါ်ကနေ သွားတဲ့ bi-directional, full-duplex communications channels ကို အထောက်အကူ ပြုထားတဲ့ technology လို့ပဲ ခေါ်ရမယ်ထင်တယ်။ တနည်းဆိုရရင် web browser နဲ့ web server ကြားမှာ ဆက်သွယ်ပေးတဲ့ technology ပေါ့။ websocket ကတော့ Firefox 4, Google Chrome 4, Opera 10.70 and Safari 5 တို့မှာ သုံးလို့ရပါပြီ။ သူ့ကို အသုံးပြုပြီး real time web application တွေ ရေးသားနိုင်ပါတယ်။ Server ကတော့ websocket run ထားဖို့ လိုပါတယ်။

ဘယ်လိုရေးလဲ

java အတွက်တော့ jWebsocket ဆိုတာကို အသုံးပြုပြီး လွယ်လင့်တကူ web socket ကို server ပိုင်းအတွက် ရေးသားလို့ရတယ်။ Ruby ကတော့ websocket-ruby ဆိုတာကို အသုံးပြုလို့ရတယ်။ php ကတော့ websocket server ရှိပေမယ့် လက်တွေ့ စမ်းကြည့်တဲ့အခါမှာတော့ အလုပ်မဖြစ်တာကို တွေ့ရတယ်။ ကျွန်တော် သဘောကျတာကတော့ node.js ကို အသုံးပြုပြီး ရေးထားတဲ့ socket.io ပဲ။

Realtime Server

Realtime server ပိုင်းမှာ websocket အပြင် Comet technology ရှိပါသေးတယ်။ Ajax Push Engine လို့ ခေါ်ပါတယ်။ Ajax Push Engine ဆိုရင်တော့ APE ကို လူကြိုက်များကြတယ်။

websockets က support မလုပ်တဲ့ web browser တွေအတွက် Comet ကို အသုံးပြုလို့ရတယ်။ Realtime server အနေနဲ့ node.js ကို အသုံးပြုပြီး socket.io ကို အသုံးပြုနိုင်ပါတယ်။ Game တွေအတွက်ကတော့ SmartFox Server ကို အသုံးပြုတာ များပါတယ်။

Socket.io

socket.io ကတော့ node.js နဲ့ ရေးထားတာပါ။ Node.js က node server နဲ့run ပြီးတော့ server side ဘက်မှာလည်း javascript နဲ့ ရေးသားသလို client site ကိုလည်း javascript html နဲ့ပဲ ရေးသားပါတယ်။ Node.js က mac နဲ့ linux ပေါ်မှာ လွယ်လင့်တကူ run လို့ရပေမယ့် windows အတွက်ဆိုရင်တော့ ဒီမှာ ဖတ်ကြည့်ဖို့တော့ လိုပါတယ်။ socket.io ဟာ browser တော်တော်များများမှာ အသုံးပြုလို့ရပြီး လက်ရှိ iPhone , iPad တို့ရဲ့ safari မှာပါ အလုပ်လုပ်နိုင်ပါတယ်။ iPhone, iPad safari ဟာ iOS 4.2 မှစပြီး websocket ကို support လုပ်ပါမယ်။ ဒါကြောင့် socket.io ဟာ လွယ်ကူပြီး အမြန်ဆုံးနည်းလမ်းဆိုလည်း မမှားပါဘူး။

APE နဲ့ socket.io ကို နှိုင်းယှဉ်ရင်တော့ APE က loading နဲ့ concurrency ကို ပိုခံနိုင်ပေမယ့် ရေးသားရတာက socket.io လောက် မလွယ်ကူလှဘူး။ ဒါကြောင့် မြန်မြန်ဆန်ဆန် real time web application ဖန်တီးလိုသူတွေက socket.io ကို အသုံးပြုကြပါတယ်။

နောင်တချိန်မှာ web browser တွေ အားလုံးဟာ websockets ကို support လုပ်လာပြီး HTML5 မှာလည်း websockets ရဲ့အခန်းကဏ္႑ဟာ အရေးပါလာပါမယ်။ နောက်ပြီးတော့ websockets အတွက် server တွေဟာလည်း နောင်တချိန်မှာ real time applications တွေအတွက် စဉ်းစားစရာတွေ လိုလာပါမယ်။ ပုံမှန် အားဖြင့် C++ နဲ့ push server , sockets server တွေ လွယ်လင့်တကူ ရေးလို့ရပေမယ့် C++ မတတ်တဲ့သူတွေအနေနဲ့ကတော့ javascript ကို ကြားခံပြီး socket server တွေ ဖန်တီးရာမှာ အလွယ်ကူဆုံး နည်းလမ်းဖြစ်ပါလိမ့်မယ်။

Leave a Reply

Your email address will not be published. Required fields are marked *