2012-08-29 53 views
5

Tôi có một kết nối client ròng vào một ổ cắm (sử dụng net.createConnection (cổng, host). Này hoạt động tốt.nodejs kết nối kết nối net

Tuy nhiên, đôi khi có khả năng của máy chủ thả các kết nối, và tôi muốn kết nối mạng để tự động kết nối lại khi máy chủ là sao lưu và chạy

tôi có thể bẫy về ('kết thúc') sự kiện để bắt ngắt kết nối ban đầu, và cố gắng kết nối lại.

Tuy nhiên, làm thế nào tôi có thể kiểm tra xem khách hàng đã kết nối chưa, bởi vì tôi muốn thử lại sau mỗi mili giây trên chiến lược backoff

Trả lời

5

Trong trình xử lý end, hãy đặt thời gian chờ sẽ thử lại kết nối và đặt một lần xử lý connect sẽ hủy thời gian chờ.

+0

tôi nghĩ rằng tôi đã nhận rằng đến nay, nhưng làm thế nào cách nào để phát hiện nếu cố gắng kết nối thất bại, để thử lại? – jmls

+0

Nếu nỗ lực kết nối của bạn thành công, trình xử lý 'connect' của bạn sẽ hủy thời gian chờ. Điều đó có nghĩa là nếu mã hết thời gian chờ của bạn chạy, nỗ lực kết nối bị lỗi hoặc vẫn đang được thực hiện. Nếu bạn đặt giá trị thời gian chờ một cách thích hợp (đủ lâu nếu cố gắng không thành công thì bạn không thể thành công), bạn có thể chỉ đơn giản giả định rằng nỗ lực không thành công và thử lại. – ebohlman

0

Đây là một cách tiếp cận khác đã làm việc cho tôi.

if (!client.readable) 
    client.connect(PORT,HOST); 
else 
    logger.debug('Attempt to reconnect on an active connection. Ignored.'); 

Việc sử dụng ứng dụng khách.bắt sẽ trả về giá trị - ngay lập tức - nếu kết nối vẫn còn. Nếu không, sau đó chỉ cần kết nối lại. Sử dụng client.writable không thành công.

tôi thấy phương pháp này mạnh mẽ hơn như đôi khi END CLOSE hoặc các sự kiện không xảy ra (ví dụ: VPN tắt máy, tai nạn hoặc mất điện trên phía máy chủ, vv)

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