Tôi đang cố gắng thiết lập máy chủ node.js bằng cách sử dụng socket.io. Vấn đề tôi thấy là máy chủ của tôi đang ngắt kết nối + kết nối lại máy khách sau mỗi 25 giây.node.js sockets.io ngắt kết nối mỗi ~ 25 giây (liên quan đến nhịp tim)
Đây là mã máy chủ của tôi:
var io = require('socket.io').listen(5876);
io.sockets.on('connection', function (socket)
{
console.log("New connection established");
socket.on('disconnect', function()
{
console.log("A client has disconnected.");
});
}
Khách hàng của tôi kết nối bằng cách sử dụng phân phối socket.io.js. Khi tôi hiểu nó (dường như không chính xác), tôi cần khách hàng của tôi gửi một "nhịp tim" (một thông điệp của ":: 2") mỗi 15 giây để ngăn máy chủ nghĩ rằng kết nối đã chết và ngắt kết nối nó. Về cơ bản:
<script src="socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:5876');
socket.on('connect', function(data)
{
console.log("Connected to server.");
setInterval(function() { socket.emit("::2"); console.log("sent heartbeat"); }, 15000); // schedule a heartbeat for every 15 seconds
});
</script>
Nhưng khách hàng vẫn bị ngắt kết nối + được kết nối lại sau mỗi 25 giây (không bao gồm dấu đầu tiên thứ 25 giây).
Các Node.js máy chủ giao diện điều khiển log trông như thế này (có thể cắt ra một số giống hệt giai đoạn kết nối/ngắt kết nối trước đó, như nó đã được lặp lại mỗi 25 giây):
New connection established
debug - emitting heartbeat for client 652791160849839915
debug - websocket writing 2::
debug - set heartbeat timeout for client 652791160849839915
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 652791160849839915
debug - set heartbeat interval for client 652791160849839915
info - transport end
debug - set close timeout for client 652791160849839915
debug - cleared close timeout for client 652791160849839915
debug - cleared heartbeat interval for client 652791160849839915
A client has disconnected.
debug - discarding transport
debug - client authorized
info - handshake authorized 5961067041159055274
debug - setting request GET /socket.io/1/websocket/5961067041159055274
debug - set heartbeat interval for client 5961067041159055274
debug - client authorized for
debug - websocket writing 1::
New connection established
Làm thế nào tôi có thể ngăn chặn máy chủ của tôi từ ngắt kết nối + kết nối lại máy khách sau mỗi 25 giây?
như xa như tôi biết bạn không cần phải tự gửi các gói nhịp tim như thế này được xử lý bởi socket.io. Hãy thử kiểm tra các sự kiện kết nối và ngắt kết nối sau khi thực hiện các cuộc gọi nhịp tim thủ công của bạn. – f0x
bạn đã bao giờ giải quyết vấn đề này chưa? \t tôi đang gặp vấn đề chính xác. Tôi hạ cấp xuống 0.8.7 và vẫn còn vấn đề tương tự. gỡ lỗi - bắn heartbeat timeout cho khách hàng 3744936361854682925 thông tin - vận chuyển kết thúc gỡ lỗi - thiết lập thời gian chờ đóng cho khách hàng 3744936361854682925 gỡ lỗi - xóa thời gian chờ đóng cho khách hàng 3744936361854682925 –
@PranoyC Có một workaround ở đây có thể làm việc: https://github.com/socketio/socket .io/issues/777 Bên cạnh đó, gần đây tôi đã sử dụng các phiên bản mới nhất của socket.io và không gặp phải bất kỳ sự cố nào. – Josh1billion