Tiếp tục thắc mắc về realtime

Hi guys! Mình là Phú, không biết mọi người còn nhớ mình người lần trước hỏi về kỹ thuật long-polling hay không :smiley: . Sau vụ giải đáp thắc mắc đó, mình có triển khai lên host free để test và nhận ra nó hoạt động không được tốt cho lắm. Host lại không cho nhiều connection (max_connection = 3) nên khi mình chạy 2 cửa sổ bị error ngày :smile:. Mình không build nó nữa. Cho đến hôm nay - ngày mình tình cờ đọc về Server-sent Events [SSE] của html5. Rồi lấy dùng thử. Tạo demo khác để test thôi thì khá ổn. Nhưng có một điều sau khoảng 3s chờ thì client mới có request và nhận dữ liệu mới. Đọc một hồi nữa thì biết nó chỉ nhận được message từ phía server, không giống như socket có thể tạo ra 2 kênh liên lạc với nhau.
Tiếp tục tìm socket, từ khóa của mình là “how to build realtime app html5”, " how to build realtime app js" => Toàn thấy ra framework build sẵn với pusher :confounded: Nếu không có hướng dẫn build bằng js hay html5 thì realtime của 1 số trang web họ sử dụng công nghệ gì? Mình lấy ví dụ facebook, theo mình được biết nó được viết bằng php (facebook tạo ra hack dựa trên php) thì họ tích hợp công nghệ realtime nào. Đọc tài liệu thấy php không hỗ trợ realtime và muốn realtime phải thêm 1 phần mở rộng gì gì đó.
Để mình tóm tắt

  1. realtime của 1 số trang web họ sử dụng công nghệ gì?
  2. php muốn tích hợp realtime như thế nào?
  3. build 1 ứng dụng realtime có khó không?
    Mình đang cảm thấy php nó yếu kém nhiều so với node.js anh em đừng chỉ mình học node.js nhá :disappointed_relieved:
    Thank for reading.

Theo như mình biết thì tùy mức độ mà bạn gọi là realtime nó ntn. Nếu request thấp thì dùng angularjs… để request ajax, cảm giác nhanh hơn, tiện hơn ajax thôi. Thực sự realtime thì dùng socket. Bạn tìm thư viện hỗ trợ socket của php để backend, frontend thì dùng html5 nếu là web.

Facebook đã từng dùng socket, lần cuối mình xem thì họ đã chuyển về ajax, h thì ko rõ.

Mình muốn đề cập đến vấn đề realtime đấy. Mình không nghĩ đến mức độ hay gì, khái niệm realtime của mình là “thời gian thực” nghĩa là khi người ta nhắn tin thì bên mình cũng nhận được luôn. Mình xem facebook thấy nó cũng giữ request, nhưng có thể chỉ là 1 phần trong hệ thống của nó.

Cảm ơn bạn :wink: :wink:

1 Like

Cái Flux này nó không liên quan tới vấn đề realtime nhé. Nó chỉ là cách để giữ cho data và UI luôn đồng bộ.

Bạn có thể đọc thêm các kỹ thuật realtime ở đây:

Tuỳ khái niệm realtime mà bạn định nghĩa cho ứng dụng thôi.

  • Nếu cần realtime thực sự: chắc chắn phải dùng websocket, SSE, Long pulling hoặc Comet rồi. Tuy nhiên, sẽ rất tốn connection và nếu dữ liệu thay đổi liên tục, có thể việc tính toán phía server sẽ rất đắt. Ví dụ bạn cần tính tổng đơn hàng đã bán được, mà cứ 0.5s lại có đơn hàng mới thì việc tính tổng mỗi 0.5s như vậy rất đắt về resource.
  • Còn việc gửi ajax định kỳ cũng có thể cho cảm giác realtime, vì ngay cả realtime thật cũng sẽ bị delay về network, … Facebook sử dụng gửi ajax định kỳ.

Còn nếu muốn dùng realtime thực sự với PHP, bạn có thể sử dụng ZeroMQ, ReactPHP, … Tuy PHP không native support như NodeJS nhưng hoàn toàn có thể sử dụng event-loop tự viết hoặc thư viện được.

3 Likes

CẢm ơn bạn nhiều nhé! Mình sẽ xem kỹ!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?