2014-09-09 12 views
10

Chúng tôi chạy ứng dụng Node.js và Express trên Heroku sử dụng thư viện ws cho các ổ cắm web thời gian thực. Dưới đây là một ảnh chụp màn hình của nhiều H15 thời gian chờ mà chúng ta đang thấy.Node.js Web Socket H15 Idle Thời gian chờ kết nối trên Heroku

enter image description here

Tôi đã đọc rằng Heroku terminates any idle connection after 55 seconds nhưng ổ cắm của chúng tôi gửi ping-pong qua lại mỗi 5 giây khi kết nối đang mở. Một mảnh của mã máy chủ là dưới đây:

var _this = this; 

this.server.on('connection', function(ws){ 

    // check for a ping, respond with pong 
    ws.on('message', function(data){ 
     data = data.toString('utf8'); 
     if (data === PING) { 
      ws.send(PONG); 
     } 
    }); 

    ws.on('close', function(err){ 
     TL.logger.info('Socket closed: '+path); 
     _this.sockets = _.filter(_this.sockets, function(_ws){ 
      return ws != _ws; 
     }); 
    }); 

    ws.on('error', function(err){ 
     TL.logger.info('Socket error: '+path); 
     _this.sockets = _.filter(_this.sockets, function(_ws){ 
      return ws != _ws; 
     }); 
    }); 

    _this.sockets.push(ws); 
}); 

Và đây là một hình ảnh của ổ cắm phía khách hàng trong chrome:

enter image description here

Bất cứ ý tưởng là làm thế nào để ngăn chặn các kết nối nhàn rỗi?

+1

Bạn có giải quyết được vấn đề này không? –

+0

Đáng buồn là không, chúng tôi vẫn có một loạt các kết nối nhàn rỗi dường như ngẫu nhiên. – Andrew

+0

@Andrew Chúng tôi cũng gặp lỗi tương tự 2 năm sau đó. Bạn đã bao giờ tìm ra nguyên nhân chưa? – FajitaNachos

Trả lời

1

tiết lộ: Tôi là chủ sở hữu nền tảng Node.js tại Heroku.

Bạn có thấy điều này ở phía khách hàng không? Hoặc chỉ là bảng điều khiển báo cáo lỗi?

Tôi khuyên bạn nên tập trung vào việc tái tạo các lỗi trên ít nhất một khách hàng, để xem liệu có thực sự tác động nào không. Nếu không, bạn có thể lãng phí thời gian gỡ lỗi dương tính giả.

Nếu bạn quyết định tiếp tục gỡ lỗi, bạn có thể muốn cài đặt miễn phí papertrail/nodetime/new relic/strongloop addon để tìm ra chính xác yêu cầu nào đang kích hoạt các H15.

+0

Cảm ơn bạn đã bình luận! Chúng tôi không sử dụng socket.io, chỉ cần mô-đun ws và tôi chưa thấy bất kỳ sự cố nào trên máy khách, tôi chỉ thấy các lỗi trong trang tổng quan. – Andrew

+0

Xin lỗi, hầu hết các câu hỏi liên quan đến websocket đều dựa trên socket.io. Tôi đã cập nhật câu trả lời của mình để phản ánh thư viện ws. – hunterloftis

+0

Tôi gặp lỗi tương tự trong ứng dụng Meteor (Meteor dựa trên Node), bài đăng này gợi ý rằng nó phải làm với Heroku và root/apex/naked domains (ALIAS/ANAME etc), mà chúng ta cũng sử dụng: http: // stackoverflow.com/questions/13063683/h15-on-heroku-sse-request –

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