2013-09-03 65 views
10

Tôi đang thử nghiệm với Rails 4 ActionController::Live và Sự kiện được gửi trên máy chủ. Tôi đang sử dụng MRI 2.0.0 và Puma.Sự kiện và sự kiện đã gửi của máy chủ Phát trực tuyến

Đối với những gì tôi có thể thấy, mỗi khách hàng được kết nối sẽ giữ kết nối hoạt động với máy chủ. Tôi đã tự hỏi nếu nó có thể tận dụng SSE mà không giữ tất cả các dòng phản ứng đang chạy.

Puma quản lý nhiều kết nối bằng cách sử dụng chuỗi và tôi tưởng tượng có giới hạn về số lượng kết nối cuncurrent.
Điều gì sẽ xảy ra nếu tôi muốn hỗ trợ một kịch bản thế giới thực với hàng nghìn khách hàng đăng ký ứng dụng Rails của tôi cho các sự kiện SSE?

Có ví dụ nào không?

Ngoài ra, tôi thường chạy các máy chủ ứng dụng Rails phía sau proxy ngược nginx. Nó sẽ yêu cầu bất kỳ thiết lập cụ thể?

Trả lời

3

Cách SSE được xây dựng là do ứng dụng khách mở kết nối với máy chủ, sau đó nó được mở cho đến khi máy chủ có một số dữ liệu để gửi. Đây là một phần của đặc tả SSE, và không phải là một điều cụ thể đối với ActionController :: Live. Nó có hiệu quả giống như bỏ phiếu dài, nhưng với kết nối không bị đóng sau khi bit dữ liệu đầu tiên được trả về và với cơ chế được tích hợp trong trình duyệt.

Như vậy, cách duy nhất nó có thể được triển khai là bằng cách có nhiều kết nối máy khách mở tới máy chủ web, nơi có vô thời hạn. Về nguồn lực cần thiết để giải quyết chúng, tôi không chắc chắn, vì tôi chưa thử điểm chuẩn này, nhưng nó sẽ cần đủ máy chủ cho Puma để tiếp tục mở hàng nghìn kết nối nếu bạn có nhiều người dùng một trang mở.

Giới hạn mặc định cho puma là 16 kết nối đồng thời. Một số blog đăng bài về việc thiết lập SSE cho Rails đề cập đến việc nâng cấp này lên một giá trị lớn hơn, nhưng không có gì mà tôi đã tìm thấy đề xuất giá trị cao hơn này nên là bao nhiêu. Họ đề cập đến số lượng các kết nối DB sẽ cần phải giống nhau, vì mỗi luồng Rails giữ một luồng đang chạy. Sắp xếp các âm thanh như một cách tốn kém để chạy mọi thứ.

"Chạy điểm chuẩn" là câu trả lời duy nhất thực sự.

Tôi không thể nhận xét để đảo ngược proxy như tôi đã không thử nó, nhưng khi SSE được thực hiện qua HTTP chuẩn, tôi không nghĩ rằng nó sẽ cần bất kỳ thiết lập đặc biệt.

+0

Ok, cảm ơn bạn đã phản hồi! – tompave

+1

có ai thực sự làm điểm chuẩn như vậy không? – nicolas

+0

Tôi đã không chạy điểm chuẩn, nhưng cuối cùng tôi đã loại bỏ nỗ lực như _non production ready_. Tôi sợ rằng đối với những loại kịch bản này, chúng ta cần sử dụng một mô hình có sự kiện. – tompave