2013-04-11 18 views
5

Trong socket.io sự kiện ngắt kết nối không kích hoạt khi vận chuyển bỏ phiếu đang hoạt động. Nếu tôi chuyển phương tiện sang websockets nó hoạt động tốt, nhưng trong xhr-polling nó không hoạt động.socket.io - ngắt kết nối sự kiện không kích hoạt trong xhr-polling

/* Basics */ 
var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

server.listen(1337, null); 

io.set('transports', ['xhr-polling']); 

// routing 
app.get('/', function (req, res) { 
    res.sendfile("index.html"); 
    app.use(express.static(__dirname)); 
}); 

io.sockets.on('connection', function (socket) 
    socket.on('disconnect', function() { 
     console.log('LOL'); 
    }); 
}); 

Trong đoạn mã sau sự ngắt kết nối không cháy, nhưng nếu tôi xoá dòng -
io.set('transports', ['xhr-polling']);
Nó hoạt động hoàn hảo, vậy tại sao nó không hoạt động với XHR-bỏ phiếu? nhưng chỉ với websockets?

Làm cách nào để khắc phục sự cố này? Tui bỏ lỡ điều gì vậy?

Cảm ơn trước;)

+0

Tôi cũng cần câu trả lời cho câu hỏi này. –

+2

Điều này có liên quan đến câu trả lời này không? http://stackoverflow.com/questions/12043893/socket-io-force-a-disconnect-over-xhr-polling – Strat

Trả lời

1

Nó không thể phát hiện ngay lập tức ngắt kết nối sử dụng XHR-Polling kể từ khi khách hàng kết nối liên tục cho mỗi tin nhắn.

Socket.io giải quyết vấn đề này bằng cách đặt thời gian chờ không hoạt động trên ổ cắm xhr-polling.

Đây là tài liệu có liên quan: https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

Xem tùy chọn heartbeat interval cấu hình. Mặc định là 25 giây.

Websocket duy trì một socket tcp liên tục giữa trình duyệt và máy chủ để socket.io thường có thể phát hiện ngay khi socket bị ngắt kết nối.

1

tôi đã cùng một vấn đề, và sau đó tôi sử dụng tùy chọn { 'ngắt kết nối đồng bộ về dỡ bỏ': true} trong client socket:

var socket = io.connect('http://yourServerDomain.com', {'sync disconnect on unload' : true}); 

nó buộc các ổ cắm để gửi sự kiện ngắt kết nối immediatly.