ทำความเข้าใจ Server Sent Events
ลองจินตนาการว่าคุณกำลังใช้งาน ChatGPT คุณถามคำถามหนึ่งคำถาม แทนที่จะเห็นคำค่อยๆ ปรากฏขึ้นทีละคำ คุณกลับต้องรอถึง 5 วินาทีเพื่อให้คำตอบทั้งหมดแสดงขึ้นมาพร้อมกัน
ความล่าช้านี้ทำให้รู้สึกช้า และน่าหงุดหงิด
เพื่อแก้ปัญหานี้ นักพัฒนาจึงใช้การตอบกลับแบบสตรีมมิ่ง (streaming responses) ซึ่งช่วยให้ประสบการณ์การใช้งานดูรวดเร็วขึ้น
Server Sent Events (SSE) คือสิ่งที่ทำให้สิ่งนี้เป็นไปได้
SSE คืออะไร? SSE คือมาตรฐานสำหรับการสตรีมข้อมูลจากเซิร์ฟเวอร์ไปยังไคลเอนต์ผ่าน HTTP ซึ่งช่วยให้เซิร์ฟเวอร์สามารถส่งข้อมูลอัปเดตมาให้คุณได้แบบเรียลไทม์
หลักการทำงาน:
เซิร์ฟเวอร์จะส่งบล็อกข้อความขนาดเล็ก โดยบล็อกเหล่านี้จะใช้ฟิลด์ต่างๆ เช่น data, event, id และ retry โดยแต่ละบล็อกจะถูกคั่นด้วยบรรทัดว่าง
ตัวอย่าง: data: {"name": "Portal Gun", "price": 999.99}
การใช้งานทั่วไปสำหรับ SSE:
- การสตรีมแชทของ AI
- การแจ้งเตือนแบบสด (Live notifications)
- ล็อกแบบเรียลไทม์ (Real time logs)
- การสังเกตการณ์ระบบ (System observability)
ก่อนที่จะมี SSE นักพัฒนาใช้วิธีหลักๆ 2 วิธีในการรับข้อมูลอัปเดต:
Short polling ไคลเอนต์จะร้องขอข้อมูลจากเซิร์ฟเวอร์ หากข้อมูลยังไม่พร้อม เซิร์ฟเวอร์จะส่งข้อความให้รอ ไคลเอนต์จะรอแล้วจึงร้องขอใหม่ วิธีนี้จะทำซ้ำไปเรื่อยๆ จนกว่างานจะเสร็จสิ้น
Long polling ไคลเอนต์จะร้องขอข้อมูลจากเซิร์ฟเวอร์ เซิร์ฟเวอร์จะเปิดคำขอค้างไว้จนกว่าข้อมูลจะพร้อมหรือเกิดการหมดเวลา (timeout) ไคลเอนต์จะต้องเริ่มส่งคำขอใหม่ทันทีหลังจากได้รับคำตอบ
Event streams ใช้จัดการกับกระบวนการที่เกิดขึ้นอย่างต่อเนื่อง ซึ่งกระบวนการเหล่านี้จะมีลำดับขั้นตอนที่เฉพาะเจาะจง ตั้งแต่งานง่ายๆ อย่างการสร้างไฟล์ PDF ไปจนถึงงานที่ซับซ้อนอย่างการทำธุรกรรมธนาคาร
เซิร์ฟเวอร์จะเปิดช่องทางการสื่อสารกับไคลเอนต์ และจะเปิดช่องทางนี้ค้างไว้จนกว่ากระบวนการจะเสร็จสิ้น
แหล่งที่มา: https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd