วันอาทิตย์ที่ 20 ธันวาคม พ.ศ. 2558

ws part 10 Server-Sent Event example




>> ทำความเข้าใจความคิดของ sse ไปแล้ว จึงได้ลองทำเป็นโปรเจ็กค์เล็กๆครับ ติดปัญหาการ config บ้าง, จาร์บ้าง หรือเวอร์ชันไม่รองรับบ้าง ส่วนตัวได้ผลสรุปว่า

- รันบน tomcat server ไม่ได้ผลตามที่ต้องการ, ไม่สามารถควบคุม uri ได้ กล่าวคือ เมื่อเรียก uri ไปหา resource ได้ กลับมองหา index page ไม่เจอ หรือในทางตรงข้าม หากเรียกไปหา index page ได้ก็จะหา resource ไม่เจอ, คาดว่าเป็นเรื่องของ context กับ url-pattern ครับ (แก้ไขได้ แต่ไว้ก่อน)

- รันบน glass fish server ได้ผลตามต้องการ สามารถควบคุม uri ได้ จึงได้นำมาโพสต์เป็นตัวอย่างในคราวนี้

>> ภาพทั้งหมดนี้อธิบายได้ว่า เมื่อ client ร้องขอไฟล์ index.html จาก server, ในไฟล์ index.html นั้นมีจาวาสคริปต์เรียกไปยังบริการลงทะเบียนของ sse อยู่ (services/events) เท่ากับบอกตัวตนของตัวเองแก่ server


>> ที่ server คำรองขอจาก index.html ข้างต้นจะเรียกไปยังเมธอดชื่อ getConnection สร้าง EventOutput และลงทะเบียนกับออบเจ็กค์ SseBroadcaster รอการถูก broadcast ต่อไป ความจริงแล้ว server รู้จัก client ก็ตรงนี้แหละครับ


>> สถานการณ์ต่อมา (วิ่งลงน้ำ อะไม่ใช่) client ร้องขอไฟล์ chat.html จาก server ก็จะได้ฟอร์มสำหรับ post ชื่อตัวเองกับข้อความ, เมื่อไรก็ตามที่ post ไปยัง server, บริการที่ชื่อ post จะทำงาน เกิดการสร้าง OutboundEvent (หรือก็คือหัวใจของการสร้างและรับ event ของ part ที่แล้ว) ส่งให้กับประดา client ที่ได้เคยมาลงทะเบียนไว้ ด้วยการ broadcast (ป่าวประกาศออกไปให้กับทุกคนนั่นเอง)


>> เป็นว่าทุก client ที่เรียกมายัง index.html ก็จะได้รับข้อความหรือ event เดียวกันทั้งหมดครับ เช่นห้องสนทนาของสามคนนี้ หมี, น้องเฟิร์น และโหน่งเต่ง ครับ



>> หลักความคิดของ sse ตัวอย่างนี้ใช้การ push events จาก server สู่ client เป็นการสื่อสารแบบทางเดียว โอกาสต่อไปเราจะเข้าสู่วิถีของ WebSocket ซึ่งเป็นการสื่อสารสองทาง และจาวาบรรจุความคิดนี้แล้วใน JEE เวอร์ชัน 7 เอาล่ะไว้เจอกันใหม่ สวัสดีครับ

>> ไฟล์อื่นๆ
- SseApplication.java


- มาดูที่ System.out.println ของ server กันบ้าง ว่า client คุยอะไรเข้ามา (นี่มันภาษาอะไร? มันคือ HTML entity)


- จึงต้องเอาไป decode (ผมเลือกใช้เว็บนี้ https://mothereff.in/html-entities)


>> สุดท้ายเป็นภาพที่ได้จาก http://caniuse.com/#feat=eventsource บอกได้ว่าในขณะนี้ browser รุ่นไหนของเจ้าไหนบ้างที่รองรับเทคโนโลยี sse ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น