2010-10-17 21 views
9

Tôi đang cố gắng xây dựng giải pháp truyền trực tuyến cho ứng dụng nội bộ, nhưng tôi đang vẽ khoảng trống cho giải pháp để vượt qua rào cản. Hiện tại, trong ví dụ làm việc của tôi, tôi đang sử dụng APE, nhưng do những hạn chế, tôi không thể có bất kỳ quy trình chạy nước ngoài nào trên máy chủ, vì vậy tôi không thể chạy máy chủ APE.Truyền trực tuyến bằng Node.js hoặc bất kỳ giải pháp Comet nào khác

Tôi đang tìm các giải pháp thay thế, nhưng mọi thứ tôi đã tìm thấy cho đến nay đều yêu cầu chạy các quy trình trên máy chủ.

Một số chi tiết về dự án.

  • Sẽ có khoảng 25 người được kết nối cùng một lúc
  • Lý tưởng nhất là tất cả mọi người sẽ thấy các bản cập nhật cùng một lúc, trong thời gian sớm khi chúng có sẵn.
  • Nó sẽ chạy trong môi trường Windows, vì vậy các giải pháp C# /. NET sẽ thích hợp hơn những thứ như PHP.

Bất kỳ ai có ý tưởng nào, nếu node.js có khả năng xử lý vấn đề này hoặc bất kỳ giải pháp nào khác?

+2

Tôi tin rằng nút không có sẵn trên Windows, tôi có thể bị nhầm lẫn. – Robert

Trả lời

10

Vấn đề là các máy chủ web truyền thống sử dụng phương pháp luồng trên mỗi socket để xử lý người dùng đồng thời không phải lúc nào cũng tối ưu cho các kỹ thuật sao chổi/bỏ phiếu dài. (Các phiên bản mới hơn của IIS có cách để cắm các trình xử lý kết nối của riêng bạn, tuy nhiên, tôi sẽ nhận được quá dưới đây.)

Đối với các máy chủ web truyền thống, mục tiêu thường xuyên hơn là có kết nối, phục vụ người dùng càng nhanh càng tốt, và chuyển sang kết nối tiếp theo. Nếu một kết nối kéo dài trong một thời gian dài, nó có thể làm một cái gì đó chuyên sâu, giống như một tải lớn hoặc truy vấn lớn nhưng tổng thể tích cực của nó bằng cách sử dụng CPU để mô hình luồng hoạt động khá tốt.

Trong sao chổi (bỏ phiếu dài), thông thường bạn đang kết nối với máy chủ web nơi bạn chỉ cần đợi một sự kiện xảy ra và thường xuyên hơn không. Điều này thúc đẩy nhiều kết nối đồng thời hơn. Ngoài ra chacnes là nhiều người trong số những người dùng này đang chờ đợi trên cùng một sự kiện xảy ra trên diễn đàn.

Phân bổ một chuỗi để người dùng chủ yếu chỉ quay và đợi không phải là mô hình rất tối ưu cho loại điều này. Mô hình tốt hơn là máy chủ web dựa trên vòng lặp sự kiện thực hiện mọi thứ theo kiểu thời trang không đồng bộ và việc gửi đi một sự kiện cho nhiều người dùng không liên quan đến chuyển đổi ngữ cảnh tốn kém cho từng khách hàng. Đây là những gì Node.js được xây dựng trên (sử dụng libevent làm lõi của nó), cũng như Ruby Eventmachine, Twisted Python, Tornado của Friendfeed, Jetty và máy chủ dựa trên C# Manos C#.Đó là lý do tại sao thường có lợi thế hơn để sao chổi thực hiện theo quy trình riêng của mình, máy chủ tùy chỉnh vì máy chủ web truyền thống như Apache và các phiên bản cũ hơn của IIS không hoạt động trong một vấn đề hiệu quả cho nhu cầu của Comet.

Ứng dụng ASP.NET tiêu chuẩn hơi bị xáo trộn vì nhóm luồng trong .NET được giới hạn trong 25 luồng chung và 25 luồng IO (và kết nối http lấy một chuỗi IO). Bạn có thể bị giới hạn hiệu quả ít hơn một chút so với thực tế bởi vì nhóm luồng được chia sẻ với tất cả những thứ khác trong .NET. Tuy nhiên, bạn có thể bẻ khóa luồng mặc dù với cài đặt cấu hình, nhưng hiệu suất có xu hướng phân rã theo cấp số nhân với nhiều chủ đề bạn ném vào. Bạn có thể đưa ra con số này nếu bạn có thể đảm bảo rằng bạn sẽ không phát triển quá nhiều, và sau đó có thể chỉ sử dụng màn hình chuỗi tiêu chuẩn trong .NET để xây dựng sự kiện điều phối sự kiện của riêng bạn.

Tuy nhiên, các ứng dụng .NET chạy các phiên bản IIS mới hơn có tia hy vọng. Bạn có thể tạo một tùy chỉnh IAsyncHttpHandler. Có một số hướng dẫn trực tuyến tuyệt vời để bạn đọc về cách thức hoạt động của nó. Với điều đó bạn có thể xây dựng hồ bơi kết nối của riêng bạn và phục vụ khách hàng hiệu quả hơn. Nó không phải là một giải pháp hoàn hảo và bạn phải tự mình xây dựng nhiều đường ống dẫn nước. WebSync là một sản phẩm thương mại kết thúc giao diện này cho bạn và cung cấp cho bạn một số phần khung cấp cao mà bạn có thể làm việc với tuy nhiên.

+0

Related: Comet cho Azure/IIS: http://www.windowsazure.com/en-us/develop/nodejs/ – LamonteCristo

0

Bạn có thể tự mình thực hiện nó bằng cách sử dụng tính năng tổng hợp dài. 25 yêu cầu đồng thời không phải là vấn đề đối với IIS. Chỉ cần xem xét những gì APE truyền tới các máy khách - nó khá sạch sẽ như thế nào để thực hiện lại rằng trong 100 dòng mã (tôi có nghĩa là tuần tự hóa ở định dạng tương thích).

1

WebSync sẽ là giải pháp tốt cho bạn; nó chạy trên IIS, vì vậy không cần quá trình bên ngoài. Kiểm tra xem nó ra here.

0

Bạn đã xem PubNub chưa? Nó có thể xử lý những gì bạn đang làm. Nó tốn tiền, nhưng bạn cũng nhận được một loạt các giao dịch miễn phí. Không chắc chắn loại tải bạn mong đợi.

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