2011-10-19 41 views
6
http.createServer(function(request, response) { 
console.log("New request :"+request.url); 
var found = false; 
for(var i= 0; i < requests.length; i++){ 
    match = requests[i]; 
    if(match.method == request.method && request.url.match(match.regexp)) 
    { 
     console.log("Matched request: "+match.url); 
     pg.connect(databaseUrl, function(error, client) { 
      if(error) 
       processError(response, error); 
      else 
       match.action(client, request, response); 
     }); 
     found = true; 
     break; 
    } 
} 
if(!found) 
    processError(response, "Request url does not exist: "+request.url); 
}).listen(3000); 
sys.puts("Server running... waiting for requests"); 

Xin chào mọi người. Tôi bị kẹt với mã này. Bất cứ khi nào tôi gọi 11 lần cùng một yêu cầu, nodejs dừng đáp ứng và thậm chí không ghi lại "New request:" + request.url. Bất cứ ai cũng có ý tưởng về những gì đang xảy ra?NodeJS dừng đáp ứng sau 11 yêu cầu

Thanks a lot.

+0

Tôi không thấy bất kỳ điều gì trong phần này của mã nhưng điều đó thực sự không hiệu quả. Bạn nên sử dụng một băm thay vì lặp lại một mảng để quyết định nếu một hành động phù hợp - O của nó (1) thay vì O (n)! – Stephen

+0

Cảm ơn câu trả lời nhanh của bạn. Quả thực nó có thể hiệu quả hơn nhiều. Nhưng nó không phải là một ưu tiên cho thời điểm này. Tôi chỉ cần một máy chủ "ổn định" và thực sự không hiểu hành vi này (không có lỗi từ máy chủ). – Elendir

+0

Không có gì sai với mã này mà tôi có thể thấy - Tôi sẽ tìm các vấn đề trong xử lý db của bạn hoặc xử lý khớp ... – Stephen

Trả lời

2

Xin lỗi vì sự chậm trễ này. Tôi đã tìm thấy vấn đề là gì nhưng không hoàn toàn hiểu nó. Trong vòng kết nối, tôi đã sử dụng các hàm thực sự chỉ mô phỏng các giá trị (thường được ghi lại bởi một yêu cầu). Đây là vấn đề. Nếu bạn không đưa ra bất kỳ yêu cầu cơ sở dữ liệu nào trong pg.connect và loop trên nó, có vẻ như các kết nối không đóng đúng cách. Vì vậy, các hồ bơi kết nối dường như phá vỡ. Hy vọng tôi đã đủ rõ ràng.

Dù sao, cảm ơn sự giúp đỡ của bạn.

+0

Lưu ý rằng thông báo 'sys.puts' có thể không chính xác - máy chủ chỉ được đảm bảo lắng nghe khi chức năng gọi lại (tùy chọn) cho các vụ cháy' listen'. Xem: http://nodejs.org/docs/latest/api/http.html#server.listen – Gijs

+0

Không biết .listen không đồng bộ, cảm ơn mẹo. – Elendir

0

Tôi nghĩ rằng sự cố là cuộc gọi không đồng bộ "pg.connect" trong vòng lặp for. Hãy thử mô-đun js này async

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