วันอังคาร, พฤษภาคม 24, 2554
Jetty : จิ๋วแต่แจ๋ว
หลังจาก Blog ที่แล้ว .. ที่ไปอ่านเจอในส่วนของ HTML5 Web Socket มา ....
มาในวันนี้ก็เลยมาลอง POC ดูว่า มันจะเจ๋งจริงหรือเปล่า ....
การที่จะใ้ช้ HTML5 Web Socket ได้นั้น จำเป็นที่จะต้องมี Server
ที่รับ Web Socket Protocol ให้ได้เสียก่อน ซึ่ง Web Socket Protocol นั้นจริงๆ แล้ว
ก็เป็นอีก Protocol นึงที่วิ่งอยู่บน HTTP/HTTPS Protocol ... อยู่แล้ว
จึงค่อนข้างสบายใจหน่อยที่จะหา WebServer / Servlet Container มาทำให้ Support ได้ ...
ครั้นที่จะเขียน Server เองทั้งหมดดูจะบ้าพลังไปหน่อย ...
ก็เลยเสาะหา Server Framework ตัวเล็กๆ ที่พอจะเอามาลองได้ครับ ..
พระเอกในงานนี้ จึงเป็น Jetty นั่นเอง ....
สมัยก่อนที่ทำ J2EE ก็ไม่ได้สนใจ Jetty เท่าที่ควร อันเนื่องมาจาก Feature ที่มีน้อยนิด
ประกอบกับ ทำ Web Application เป็นหลัก ... เลยติดอยู่กับ Tomcat ซะส่วนใหญ่
มาตอนนี้จะใช้ Tomcat เป็น Servlet Container ก็ดูจะ "ใหญ่ไป"
ประกอบกับ @Khajochi มาโฆษณาเกี่ยวกับ Jetty ก็เลยหามาลองเล่นดูครับ ...
คุณสมบัติของ Jetty สามารถเป็นได้ทั้ง Servlet Container อีกทั้งยังสามารถเป็น Embed Server ได้ด้วย
ความหมายของ Embed Server คือเราสามารถเอา jetty มาเปิด port เพื่อเขียน Service
ที่ต่อจาก Application เราออกไปได้นั่นเอง ด้วยความเล็กของมัน
ทำให้เราสามารถงัดเอาประโยชน์ของมันมาใช้ได้พอตัว .... ดังเช่นในรูปนี้ ...
จะเห็นได้ว่าวัตถุประสงค์ที่ต้องการเอา jetty มาใช้
เพียงเพื่อขยายขีดความสามารถของ Application เรา
ให้สามารถรองรับ protocol ใหม่ๆ ได้มากขึ้น .... และลดข้อจำกัดของ Legacy System ที่ไม่สามารถ
รองรับ Technology ใหม่ๆ ได้ อันเป็นเหตุมาจากปัจจัยหลายๆ อย่าง ....
จุดที่ concern หลักๆ สำหรับการ implement jetty คือ ... ต้องเขียน code เยอะ ??
คำตอบคือ ไม่เลย ... ลองมาดู Hello World ฉบับง่ายๆ กัน ...
เริ่มต้นด้วย การเขียน Handler มารับ request จาก browser ...
จากนั้น มาเขียน Main App ....
แล้วก็เริ่ม Run .....
ได้แล้ว !! เมพ !!! ซึ่งถ้าเราต้องการที่จะ implement Legacy System ให้สามารถวิ่งอยู่บน Jetty
นั้นก็สามารถเขียน Handler ต่างๆ มารองรับ หรือทำเป็น Application Context มาใช้ได้เช่นกัน ...
ปัญหาที่เจอสำหรับการทำ POC ครั้งนี้ คือ แม้ว่า Websocket จะเป็น Standard ...
และแม้ว่า Legacy System จะใช้ XML เป็น message protocol ที่วิ่งอยู่ข้างหลังบ้าน ก็ตาม
แต่หากการ implement อะไรก็ตามที่ ไม่สามารถ Validate ให้ผ่าน Specification ของ Standard ได้
จะเป็นผลทำให้การต่อยอด Legacy Application นั้นลำบากไปด้วย ....
ของเล่นนี้จึงทำได้เพียงแค่ทดลองครับ :)
Reference: http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty