0
0
Lập trình
Admin Team
Admin Teamtechmely

Khám Phá Server-Sent Events (SSE): Công Nghệ Giao Tiếp Một Chiều Giữa Server và Client

Đăng vào 3 ngày trước

• 5 phút đọc

Mở Đầu

Trong thế giới công nghệ ngày nay, việc truyền tải dữ liệu theo thời gian thực là rất quan trọng. Mặc dù WebSockets thường được xem là lựa chọn hàng đầu cho những nhu cầu này, nhưng có một công nghệ khác cũng rất đáng chú ý: Server-Sent Events (SSE). SSE mang lại sự đơn giản và hiệu quả trong việc truyền dữ liệu từ server đến client mà không cần những phức tạp mà WebSockets phải đối mặt.

SSE Là Gì?

Server-Sent Events (SSE) là một công nghệ cho phép server gửi dữ liệu theo thời gian thực đến client qua một kết nối HTTP duy nhất, với cơ chế truyền tải một chiều. Điều này có nghĩa là chỉ có server gửi thông tin xuống client, đặc biệt hữu ích cho các ứng dụng như dashboard, thông báo hệ thống hay luồng tin tức gần nhất.

Ưu điểm nổi bật của SSE là sự đơn giản trong triển khai, sử dụng giao thức HTTP chuẩn và được hỗ trợ trên các trình duyệt hiện đại thông qua đối tượng EventSource. Nhờ vào tính năng tự động kết nối lại, SSE cũng là lựa chọn tốt cho những môi trường mạng không ổn định.

Dù vậy, SSE không phù hợp với các ứng dụng yêu cầu giao tiếp hai chiều như trò chuyện hay trò chơi trực tuyến. Nó là lựa chọn lý tưởng cho những nhu cầu truyền dữ liệu đơn giản và đòi hỏi độ ổn định cao.

Lợi Ích Của SSE

Độ Trễ Thấp

SSE cung cấp độ trễ cực kỳ thấp cho các ứng dụng cần cập nhật dữ liệu liên tục. Điều này tránh việc client phải thực hiện polling - tức là tự hỏi server xem có dữ liệu mới hay không. Thay vào đó, server sẽ chủ động gửi dữ liệu ngay khi có cập nhật mới.

Tối Ưu Tài Nguyên

Sử dụng SSE giúp tiết kiệm tài nguyên cho server và mạng. Thay vì xử lý hàng triệu request không cần thiết, server chỉ cần duy trì một kết nối hoạt động và gửi dữ liệu mới khi có.

Đơn Giản Hơn WebSockets

Mặc dù WebSockets cung cấp khả năng giao tiếp hai chiều, nhưng lại đi kèm với độ phức tạp cao. SSE, ngược lại, dễ triển khai hơn rất nhiều. Việc sử dụng kết nối HTTP chuẩn giúp lập trình viên không phải lo lắng về các vấn đề phức tạp của WebSockets.

Tự Động Kết Nối Lại

Một trong những lợi ích lớn của SSE là khả năng tự động kết nối lại. Trong trường hợp mất kết nối, đối tượng EventSource sẽ tự động thử kết nối lại mà không yêu cầu thêm logic từ lập trình viên.

Ví Dụ Về SSE

Backend (Go)

go Copy
package main

import (
    "fmt"
    "net/http"
    "time"
)

func sseHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/event-stream")
    w.Header().Set("Cache-Control", "no-cache")
    w.Header().Set("Connection", "keep-alive")

    flusher, ok := w.(http.Flusher)
    if !ok {
        http.Error(w, "Streaming unsupported", http.StatusInternalServerError)
        return
    }

    for i := 0; i < 10; i++ {
        fmt.Fprintf(w, "event:welcome\ndata: Message %d\n\n", i)

        flusher.Flush()

        time.Sleep(time.Second)
    }
}

func main() {
    http.HandleFunc("/events", sseHandler)
    fmt.Println("Server listening on :8080")
    http.ListenAndServe(":8080", nil)
}

Frontend (JavaScript)

javascript Copy
const eventSource = new EventSource('http://localhost:8080/events');

eventSource.onmessage = (event) => {
    console.log('Received message:', event.data);
    document.getElementById('messages').innerHTML += `<p>${event.data}</p>`;
};

eventSource.addEventListener('welcome', (event) => {
    console.log(event.data);
});

eventSource.onopen = () => {
    console.log('Connection opened!');
};

eventSource.onerror = (error) => {
    console.log('Error occurred:', error);
};

function closeConnection() {
    eventSource.close();
}

So Sánh Giữa SSE và WebSockets

Tính năng SSE WebSockets
Giao thức HTTP/1.1 TCP (riêng biệt)
Hai chiều ✔️
Đơn giản ✔️
Hỗ trợ proxy ✔️
Tự động reconnect ✔️ ❌ (phải tự làm)

Khi Nào Nên Sử Dụng SSE

SSE phù hợp cho những trường hợp cần truyền tải dữ liệu một chiều từ server xuống client, với yêu cầu về độ trễ thấp và dễ dàng triển khai, chẳng hạn như:

  • Thông báo trực tiếp
  • Bảng điều khiển thời gian thực
  • Cập nhật thị trường chứng khoán
  • Bảng tin mạng xã hội
  • Tỉ số thể thao trực tiếp
  • Giám sát hệ thống

Kết Luận

Server-Sent Events (SSE) là giải pháp mạnh mẽ và đơn giản dành cho việc truyền tải dữ liệu thời gian thực từ server đến client. Công nghệ này là lựa chọn tối ưu khi bạn không cần thực hiện giao tiếp hai chiều và muốn đảm bảo tính ổn định và hiệu suất. Tuy nhiên, trong các tình huống có yêu cầu cao về khả năng mở rộng cho hàng triệu kết nối đồng thời, WebSockets hoặc các giải pháp chuyên dụng khác có thể là sự lựa chọn tốt hơn.

Tài Liệu Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào