2010-07-09 14 views
8

Tôi có một máy đang chạy node.js (v0.1.32) với máy chủ tcp (tcp.createServer) và máy chủ http (http.createServer). Máy chủ http được nhấn bởi các yêu cầu bỏ phiếu dài (kéo dài 50 giây mỗi lần) từ một ứng dụng dựa trên sao chổi trên cổng 80. Và có các kết nối socket tcp trên cổng 8080 từ một ứng dụng iphone cho cùng một mục đích.Làm cách nào để kiểm tra số lượng kết nối mở trong node.js?

Người ta thấy rằng máy chủ không thể xử lý nhiều kết nối hơn (đặc biệt là kết nối TCP trong khi kết nối http xuất hiện tốt !! ??) trong một thời gian và chỉ bình thường sau khi khởi động lại.

Để tải thử nghiệm các kết nối tôi đã tạo một máy chủ tcp và sinh ra 2000 yêu cầu và nhận thấy rằng các kết nối bắt đầu thất bại sau khi đạt đến giới hạn mô tả tệp tối đa trên máy (mặc định là 1024). Đó là một con số thực sự rất nhỏ.

Vì vậy, một câu hỏi mới làm quen ở đây: Làm cách nào để mở rộng ứng dụng của tôi để xử lý nhiều kết nối hơn trên node.js và cách tôi xử lý vấn đề này.

Có cách nào để tìm hiểu xem có bao nhiêu kết nối hiện hoạt tại thời điểm này?

Cảm ơn Sharief

Trả lời

3

Hey Joey! Tôi đang tìm một giải pháp unix có thể giúp tôi tìm ra số lượng kết nối mở tại một thời điểm cụ thể bất kỳ lúc nào trên máy của tôi. Lý do là máy chủ của tôi không thể xử lý các yêu cầu sau một số kết nối nhất định. Và figured rằng máy tính của tôi có thể xử lý chỉ có 1024 kết nối mở tại một thời điểm tức là, giá trị mô tả tập tin ulimit mặc định là 1024. Tôi đã sửa đổi giá trị này bằng cách thiết lập ulimit -n phù hợp với yêu cầu của tôi.

Vì vậy, để kiểm tra các kết nối mở, tôi đã sử dụng lsof cung cấp cho tôi danh sách các tệp đang mở và tìm ra số lượng kết nối được mở qua mỗi cổng tôi đang sử dụng.

2

Tôi không biết nếu có một cách tích hợp để có được số lượng kết nối hoạt động với Node, nhưng nó khá dễ dàng để giàn khoan một cái gì đó lên.

Đối với ứng dụng Node kiểu ứng dụng sao chổi của tôi, tôi giữ một đối tượng mà tôi thêm các kết nối vào làm thuộc tính. Mỗi X giây tôi lặp lại đối tượng đó và xem liệu có bất kỳ kết nối nào cần được đóng (trong trường hợp của bạn, bất cứ điều gì vượt quá giới hạn 50 giây).

Khi bạn đóng kết nối, chỉ cần xóa thuộc tính đó khỏi đối tượng kết nối của bạn. Sau đó, bạn có thể xem có bao nhiêu kết nối được mở bất kỳ lúc nào với Object.size(connections)

+0

cho giải pháp này tôi đang tưởng tượng khách hàng phải gửi một nhịp tim của một số loại để cập nhật cho dù họ có còn hoạt động không? – rlemon