ทำความเข้าใจ 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 วิธีในการรับข้อมูลอัปเดต:

  1. Short polling ไคลเอนต์จะร้องขอข้อมูลจากเซิร์ฟเวอร์ หากข้อมูลยังไม่พร้อม เซิร์ฟเวอร์จะส่งข้อความให้รอ ไคลเอนต์จะรอแล้วจึงร้องขอใหม่ วิธีนี้จะทำซ้ำไปเรื่อยๆ จนกว่างานจะเสร็จสิ้น

  2. Long polling ไคลเอนต์จะร้องขอข้อมูลจากเซิร์ฟเวอร์ เซิร์ฟเวอร์จะเปิดคำขอค้างไว้จนกว่าข้อมูลจะพร้อมหรือเกิดการหมดเวลา (timeout) ไคลเอนต์จะต้องเริ่มส่งคำขอใหม่ทันทีหลังจากได้รับคำตอบ

Event streams ใช้จัดการกับกระบวนการที่เกิดขึ้นอย่างต่อเนื่อง ซึ่งกระบวนการเหล่านี้จะมีลำดับขั้นตอนที่เฉพาะเจาะจง ตั้งแต่งานง่ายๆ อย่างการสร้างไฟล์ PDF ไปจนถึงงานที่ซับซ้อนอย่างการทำธุรกรรมธนาคาร

เซิร์ฟเวอร์จะเปิดช่องทางการสื่อสารกับไคลเอนต์ และจะเปิดช่องทางนี้ค้างไว้จนกว่ากระบวนการจะเสร็จสิ้น

แหล่งที่มา: https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd