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.
Nguồn
2010-10-27 18:04:11
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