Sử dụng Server-Sent Events thay cho WebSockets
(germano.dev)-
Khi xây dựng ứng dụng web thời gian thực, thông thường người ta sẽ nghĩ đến WebSocket, nhưng SSE cũng có thể là một lựa chọn thay thế đơn giản
-
Vấn đề của WebSocket: vì không dựa trên HTTP nên không được hưởng các lợi ích của HTTP
→ không thể nén, hỗ trợ HTTP/2 multiplexing còn hạn chế, các proxy không hỗ trợ, có thể bị hijacking
- Server-Sent Events (SSE)
→ tính năng cho phép máy chủ gửi các sự kiện push độ trễ thấp đến client
→ là tiêu chuẩn HTML và được mọi trình duyệt hỗ trợ (trừ IE)
→ khác với WebSocket, SSE là luồng một chiều từ server đến client (không phù hợp với game cần giao tiếp hai chiều)
→ hoạt động trên HTTP và không cần giao thức riêng
5 bình luận
Trong môi trường Load Balancer hoặc Proxy, nhiều trường hợp hỗ trợ SSE còn hạn chế. (+Enterprise Firewall)
Nếu bạn đang cân nhắc các môi trường như Cloudflare hay AWS CLB, hãy kiểm tra lại thêm một lần trước khi áp dụng SSE.
Đôi khi nó cũng được dùng thay cho WebSocket như một transport cho GraphQL Subscription.
Triển khai handler GraphQL SSE: https://github.com/enisdenjo/graphql-sse
Ví dụ sử dụng SSE làm subscription transport: https://www.graphql-yoga.com/docs/features/subscriptions
Khi khó triển khai WebSocket trong các môi trường đặc thù như Deno Deploy hay Lambda, đây có thể là một giải pháp thay thế. :-)
Gần đây khi xem ví dụ chat trên Deno Deploy, tôi cũng lần đầu biết đến SSE.
https://github.com/lucacasonato/deploy_chat
Hóa ra còn có cái này nữa. Học được thêm rồi
Hãy tham khảo thêm cả phần bình luận của bài viết này và phần bình luận trên HN.
Có rất nhiều ý kiến đa dạng, như từ những người đang dùng SSE, các trường hợp chuyển từ WebSocket sang, hay những trường hợp đã dùng SSE rồi lại quay về WebSocket.
https://news.ycombinator.com/item?id=30312897
Thực ra bài viết nói khá nhiều về ưu điểm của SSE, nhưng nó chỉ thực sự hữu ích trong những kịch bản đặc biệt.
Dạo gần đây phía WebSocket cũng có nhiều thư viện ra mắt nên việc triển khai cũng trở nên đơn giản hơn.
Cũng có những ý kiến như vậy.