2017-03-15 15 views
8

Chúng tôi đang triển khai một dịch vụ được nhiều người dùng sử dụng cùng một lúc. Ở đỉnh núi, chúng tôi có thể có hàng chục nghìn người trực tuyến.Quyết định xem có sử dụng các yêu cầu HTTP đơn giản hoặc WebSockets

Phần quan trọng trong dịch vụ của chúng tôi cần thực hiện lại và vì vậy, chúng tôi cố gắng nghĩ ra các cách mới để thực hiện. Tại thời điểm này chúng tôi gửi nhỏ yêu cầu HTTP đơn giản và rất ngắn/AJAX dựa trên tương tác người dùng:

  • Ping: Tôi vẫn còn hoạt động
  • Hoạt động: Tôi đã làm điều này và xin vui lòng ghi nó vào cơ sở dữ liệu
  • kết thúc: tôi có kết thúc hoạt động của tôi vì vậy đóng yêu cầu của tôi

cùng lúc đó, trong một số trường hợp (1 trong 10), chúng tôi đã mở EventSource từ đó chúng ta đọc một số sửa đổi trên máy chủ.

Câu hỏi đặt ra là liệu mô hình này có đủ hay không hoặc tốt hơn là mở một WebSocket và chuyển mọi thứ qua WebSockets.

  • Ưu điểm - đối với mỗi người dùng, chúng tôi sẽ chỉ duy trì một kết nối thay vì gửi nhiều yêu cầu.
  • Nhược điểm - khi nhiều người trên mạng, chúng tôi sẽ giữ hàng ngàn kết nối hoạt động

gì nên quyết định cho việc thực hiện phải không?

Lưu ý rằng câu hỏi này trả lời giống nhau: WebSockets protocol vs HTTP - tuy nhiên tôi yêu cầu trường hợp sử dụng cụ thể. Các câu hỏi liên quan là khá hỏi nói chung.

+0

Bản sao có thể có của [Giao thức WebSockets so với HTTP] (http://stackoverflow.com/questions/14703627/websockets-protocol-vs-http) –

Trả lời

2
  • Nhược điểm - khi nhiều người trên mạng, chúng tôi sẽ giữ hàng ngàn kết nối hoạt động

Bạn có thể thực hiện dịch vụ của bạn để đóng kết nối WebSocket nhàn rỗi sau một thời gian chờ. Đó có thể giống như cách làm thế nào EventSource hoạt động cho bạn, vì vậy bạn không giữ quá nhiều kết nối đang hoạt động. (Đặc tính hiệu suất tương tự.)

(Nhưng nếu bạn đang dựa trên việc kết nối lại tự động EventSource cung cấp bởi trình duyệt, sau đó chuyển sang WebSocket có nghĩa là bạn cần phải viết mã hơn cho logic của việc kết nối lại.)

thường WebSocket nên có ít chi phí lưu lượng mạng hơn. Nhưng có bao nhiêu sự khác biệt phụ thuộc vào cách dịch vụ hiện tại của bạn được thực hiện. Nếu bạn đã tối ưu hóa logic của bạn và vắt kiệt mọi hiệu suất với AJAX và EventSource, sử dụng WebSocket có thể là một cải tiến biên.

+0

Anh ấy có thể mở một ổ cắm web và đóng nó sau một thời gian chờ như bạn đã nói. Với điều đó, anh ta có thể gửi ping qua ổ cắm web khi người dùng thực hiện một hành động cụ thể, ví dụ: nhấp, di chuyển chuột hoặc nhấn bàn phím. nếu không kết nối sẽ bị đóng. nó tốt hơn là mở và đóng kết nối rất nhiều IMHO. Ông có thể giải quyết vấn đề của nhiều kết nối mở bằng cách mở rộng chiều ngang của mình BackEnd, rằng thêm một ~ 65.000 kết nối cho mỗi trường hợp. –

Các vấn đề liên quan