Làm cách nào để đóng kết nối ổ cắm ở phía máy khách?Node.js: socket.io đóng kết nối máy khách
Tôi đang sử dụng:
- socket.io 0,9
- Node.js 0.10.15
- bày tỏ 3.3.4
ví dụ: gọi localhost/test
- máy chủ bên
var test = io
.of('/test')
.on('connection', function (socket) {
console.log('open socket: ' + socket);
socket.on('disconnect', function() {
console.log('disconnected event');
//socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side
//socket.disconnect(); --> same here
});
});
- phía khách hàng
var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function() {
console.log('disconnect client event....');
});
socket.emit('getInitData', function (data) {
.. do something with data
});
Nếu tôi tải thử nghiệm trang Tôi cần một số giá trị từ máy chủ (getInitData).
Trong lần truy cập trang đầu tiên, tôi nhận được dữ liệu một lần, khi tải lại hoặc lần truy cập thứ hai, tôi nhận được dữ liệu đó gấp hai lần.
Kết nối ở phía máy chủ được tự động đóng lại khi tải lại trang và nếu bạn rời khỏi trang.
Nhưng ở phía máy khách, kết nối vẫn mở.
Làm cách nào để đóng kết nối ở phía máy khách hoặc kiểm tra xem đã có kết nối mở chưa?
CẬP NHẬT
tôi đã cố gắng hiện nay như sau: (phía khách hàng)
window.onbeforeunload = function(e) {
socket.disconnect();
};
này gây ra trên các mặt hàng trường hợp ngắt kết nối, nhưng tôi vẫn nhận được câu trả lời tripple hai lần hoặc. bạn
Làm thế nào để bạn xử lý 'getInitData' sự kiện? –
'getInitData' trả về một số giá trị từ nút addon bằng văn bản của riêng tôi. các giá trị đó được đặt trong một biểu mẫu (hộp kiểm, trường văn bản, v.v.) nhưng tôi chỉ phát hiện ra rằng kết nối trên máy chủ được khởi động nhiều lần. Mỗi khi tôi tải lại trang, một kết nối mới được thêm ngay cả khi kết nối đang được đóng lại. – baam
Không có thứ gì như kết nối ở phía máy chủ và phía trình duyệt. Chỉ có một kết nối. Nếu một trong các bên đóng nó, thì nó sẽ đóng lại (và bạn không thể đẩy dữ liệu đến một kết nối được đóng rõ ràng). Bây giờ trình duyệt đóng kết nối khi bạn rời khỏi trang (nó không phụ thuộc vào thư viện bạn đang sử dụng), điều này ít nhất là đúng đối với WebSockets. Nếu một vấn đề như thế này xảy ra, sau đó tôi khá chắc chắn rằng có một lỗi trong mã của riêng bạn (ở phía máy chủ). Có thể bạn đang xếp chồng một số trình xử lý sự kiện nơi bạn không nên. – freakish