Máy chủ websocket nodejs

Ổ cắm. io là một thư viện trợ giúp thời gian thực giúp chúng ta có thể giao tiếp 2 chiều giữa máy khách (trình duyệt) và máy chủ

Máy chủ websocket nodejs

Các bạn nhìn hình ở trên thì để connect giữa client và server (ở đây là mình dùng server nodejs) thì chúng ta sẽ sử dụng socket. io as after.
ổ cắm. io will support them ta 2 side.

  • Khách hàng. Chúng ta sẽ sử dụng 1 link kết nối đến máy chủ
  • Máy chủ. Chúng ta sẽ tạo ra 1 máy chủ websocket sử dụng nút js (hoặc bất kỳ ngôn ngữ nào nhưng nút js là biến phổ biến nhất) và mở cổng cho máy khách kết nối lên.
    Và sau khi máy khách gửi kết nối lên máy chủ và máy chủ kiểm tra oke, từ đó máy khách và máy chủ websocket đã có thể nói chuyện và truyền dữ liệu qua nhau.

Chú thích. ở bài này mình chỉ giải trí cho những hiểu biết rõ ràng về luồng hoạt động hơn là vì viết kiểu code để kết nối đến server thì client sẽ dùng gì hay tạo server websocket bằng node js thì sẽ phải làm như thế nào. Mình nghĩ khi các bạn đã hiểu stream hoạt động cũng như cách thiết kế 1 ứng dụng cụ thể thì các bạn mới code dễ dàng hơn thay vì cắm đầu code cũng chạy đấy nhưng stream lại k hiểu và đôi lúc lại xoắn đầu hỏi tại . @@

Tính năng cơ bản của Socket io

1. Giao tiếp giữa máy khách và máy chủ
Để giao tiếp qua lại giữa chúng thì socket. io sẽ sử dụng 2 phiên bản phát ra và bật.
Các bạn cứ mặc định hiểu cho mình thế này.

  • phát ra. Event event
  • trên. sự kiện lắng nghe

Đặc biệt giao tiếp này là cả 2 chiều client có khả năng phát (emit) và lắng nghe (on) sự kiện từ phía server gửi về và quay ngược lại

2. Các cách phát (phát) dữ liệu
Mặc định các hình ảnh bên dưới phần này như sau nhé. .

  • NGƯỜI PHỤC VỤ. tức là máy chủ websocket
  • Sokcet1, 2,… là client gửi yêu cầu kết nối lên server và server oke thì chúng ta sẽ gửi dữ liệu qua lại cho nhau như phần trước mình có giải thích nhé

– Tự phát ra. Tức là 1 client gửi 1 tin nhắn lên server thì server sẽ chỉ phát lại cho chính client đó thôi

Máy chủ websocket nodejs

– Phát sóng. Tức là 1 client gửi 1 tin nhắn lên server thì server sẽ phát lại cho tất cả các client khác cùng kết nối đến server (socket2 , socket 3 đều nhận được)

Máy chủ websocket nodejs

– Phòng phát ra. Tức là 1 client gửi 1 tin nhắn lên server thì server sẽ chỉ phát lại các phòng đã được định sẵn (như hình dưới đây socker2 và socket 3 nhóm 1 lại 1 phòng)

Máy chủ websocket nodejs

– SocketId phát ra. Tức là 1 client gửi 1 tin nhắn lên server thì server sẽ chỉ phát lại cho riêng 1 client nào đó (kiểu chat riêng giữa 2 người đó)

Máy chủ websocket nodejs

Để hiểu sâu hơn cũng như xem mã nó như thế nào thì các bạn có thể vào https. //ổ cắm. io/docs/v3/broadcasting-events/ để khám phá kỹ năng tốt hơn

Xây dựng mô hình ứng dụng trò chuyện mô hình

1. Quy mô nhỏ
Với 1 hệ thống nhỏ và theo nhu cầu lượng người dùng k lớn thì ta có thể áp dụng mô hình dưới đây

Tức là ta sẽ tạo .

  • 1 webserver (php, nodejs,…) và cài server websocket trên cùng 1 server luôn
  • các máy khách sẽ chỉ kết nối và gửi dữ liệu qua 1 máy chủ websocket duy nhất

    Các bạn có thể nhìn vào hình bên dưới.

    Mỗi khi kết nối máy chủ với websocket máy chủ sẽ tạo ra 1 socketid riêng để phân biệt ai gửi lên và trả về cho ai.

Máy chủ websocket nodejs

2. Quy mô trung bình và lớn

Giả sử dụng ứng dụng của chúng tôi chỉ đáp ứng được 10K người yêu cầu cùng 1 lúc , 1 ngày đẹp trời tự nhiên lại có 20k 30k người yêu cầu ứng dụng của chúng tôi khiến máy chủ quá tải và không thể trả lời ứng dụng .

Chính vì vậy để đáp ứng được nhiều người dùng ta sẽ có giải pháp là sử dụng thêm :

  • LoadBalance (tại đây mình dùng nginx)
  • làm lại

Start with nginx loadbalance

Nhìn vào mô hình bên dưới những tưởng tượng của bạn.
Ở đây sẽ có nhiều yêu cầu (r1, r2, …) đến nginx (cổng 3000) và nginx sẽ tải các yêu cầu tới máy chủ nodejs (máy chủ websocket cũng được cài đặt trên các máy chủ nodejs)<
theo thuật toán round robin

Các bạn có thể tìm hiểu thêm round robin nginx còn ở đây mình nói gọn là thuật toán này sẽ gửi yêu cầu đến các máy chủ theo thứ tự ví dụ lần.
r1 -> nodejs. 8000, r2-> nodejs. 8001, r3-> nodejs. 8002,…. tức là gửi xoay vòng lần lượt.

Máy chủ websocket nodejs

Use redis to application

Các bạn hầu như các bạn đều biết đến redis như là 1 bộ nhớ tạm lưu các giá trị key,value mà k biết nó còn có tính năng đặc biệt khác như pus/sub và chính nhờ tính năng này mà nó có thể giúp chúng ta

Quán rượu. Xuất bản, có nghĩa là một nhà sản xuất đưa dữ liệu vào một kênh (kênh) hay còn gọi là chủ đề như trong Kafka
Sub. Theo dõi có nghĩa là người tiêu dùng đăng ký nhận dữ liệu từ một kênh hoặc chủ đề.

Hiểu đơn giản giống như các bạn xem cáp truyền hình (ví dụ như SCTV), chúng ta là người tiêu dùng, đăng ký (subscribe) vào các kênh như. VTV1, VTV3, VTV6, HBO, Fox Movies…. Thì SCTV chính là nhà sản xuất, đưa dữ liệu (xuất bản) ra các kênh tương ứng đó và chúng ta chỉ nhận và xem trên TV thôi.
Như hình bên dưới, người đăng ký (khách hàng) sẽ nhận được dữ liệu từ nhiều kênh.

Máy chủ websocket nodejs

Mình k miên man deep về phần này nữa nếu các bạn thích hiểu rõ hơn về redis pub/sub hơn thì có thể vào link dưới đây để đọc và cũng thử test xem tính năng thần thánh này của redis nhé https. //codingpearls. com/lap-trinh-web/laravel-5-x-tips/redis-pubsub-co-che-hoat-dong-cai-dat-tren-windows. html

Oke vậy là ta có thể dùng redis để truyền tin nhắn rồi. Nhưng các bạn có thắc mắc là ví dụ tôi không dùng redis mà dùng cách loadbalance như ở trên thôi hay có thể dùng pusher chả hạn được k