Em cũng chỉ biết lý thuyết với code pet project bằng mấy cái này thôi thím ơi chứ chưa có kinh nghiệm production.
Server-Sent Event (SSE) là kiểu thím GET /events xong server cứ có data mới là trả về theo 1 format nào đó, cái request này sẽ không bao giờ kết thúc. SSE là server gửi client, chỉ 1 chiều. SSE nó có chuẩn sẵn rồi, response phải theo format chuẩn quy định. Hạn chế của nó là nếu trước đó thím xài short polling thì giờ phải sửa code để xử lý event từ server. Một hạn chế khác là binary data trong SSE cần encode mới truyền đi được, nên nếu use case của thím có liên quan truyền binary nhiều thì nó không phù hợp.
Long polling cũng là polling như thím thớt làm thôi, nhưng thay vì server respond liền thì nó sẽ giữ cái request đó lại một hồi nếu không có gì mới. Ví dụ thím GET /events lần đầu có sẵn record mới để trả về thì short polling hay long polling cũng là requets lên response về liền, nhưng mà sau đó thím gửi tiếp 1 cái request thì short polling sẽ trả lời liền là không còn gì, còn với long polling thì server sẽ vẫn giữ cái request đó lại chưa trả lời. Nếu để thời gian chờ đủ dài thì long polling nó có thể tránh được việc client hỏi đi hỏi lại hoài trong khi chưa có record nào mới. Nó cũng như SSE nhưng mà có giới hạn thời gian, request đó hết giờ thì nó gửi request khác để poll tiếp. Long polling thì được cái nó đơn giản, mình vẫn xử lý như HTTP request bình thường, chỉ thêm bước delay thôi, còn SSE phải trả về theo đúng format mà chuẩn quy định. Vậy nên nếu dùng long polling thì thím có thể không cần đổi code bên front-end mà vẫn hạn chế được số request cần xử lý.
Websocket thì thím sẽ gửi 1 GET request tới endpoint nào đó của nó, xong server nó sẽ trả lời. Phần này kêu là handshake, em bỏ qua chi tiết, thím quan tâm thì lên google tìm cái spec của nó mà đọc. Sau handshake thì 2 bên có cái socket để truyền gửi dữ liệu. Có cái kết nối này rồi thì 2 bên muốn gửi gì gửi thôi nên cái này là giao tiếp 2 chiều. Mấy cái như chat hay game thì chắc sẽ dùng cái này thường. Cái này cũng cần sửa code cả 2 phía front-end back-end, bù lại được cái nó giao tiếp 2 chiều, làm được những việc 2 cái trên không làm được.
Facebook chat xài websocket (endpoint nó là /chat), Facebook notifications hình như cũng vậy (nhưng không rõ lắm, endpoint là /realtime). Em đoán vậy vì tắt websocket đi thì không còn nhận noti được nữa.