2015-01-07 15 views
5

Trong blog socket.io cho biết, đó là trong phiên bản 1.2.1socket.io 1.2.1 Làm thế nào để sửa chữa các sự kiện đôi sau khi kết nối lại

"sửa README để ngăn chặn sự kiện kép trong ví dụ khi kết nối lại [@nkzawa ] "

Tôi đã tải xuống phiên bản 1.2.1 cho máy khách & máy chủ, Nhưng sau khi kết nối lại, nó vẫn gọi sự kiện hai lần. Hoặc tôi nên làm điều gì đó với tệp readme?

Tôi đã thử cách này để kết nối lại và hoạt động nhưng tôi có thể sử dụng nó để sản xuất. Đó là cách cứng nhắc?

socket.disconnect() 
// remove socket object 
socket = undefined 
// connect again 
socket = io.connect({'forceNew':true}) 

Như tôi đã nói có đúng cách hay không có khuyết điểm?

UPDATE, thêm mã

mã phía máy chủ

socket.on('client_emited', function(data){ 
    socketIO.to('this socket id').emit('server_emitted'); 
}) 

mã phía khách hàng

var socket; 
function connectSocket() { 
    if (!socket) 
    socket = io({'forceNew':true}); 
    else 
    socket.connect(); 
} 
socket.on('connect', function(){ 
    console.log('CONNECTED TO SOCKET.IO SERVER. SENDING "client_emited" EVENT'); 
    socket.emit('client_emited'); 
}); 
socket.on('server_emited', function(){ 
    console.log('RECEIVED "server_emited" EVENT'); 
}); 
socket.connect(); // here console shows 'CONNECTED TO SOCK...' and 'RECEIVED "server_e...' 1 time 
socket.disconnect(); 
socket.connect(); // here console shows 'CONNECTED TO SOCK...' 2 times and 'RECEIVED "server_e...' 4 times time 

và máy chủ nhận "client_emit" sự kiện hai lần

+0

vấn đề issue on github là khả năng trong mã tạo xử lý sự kiện thông điệp của bạn. Bạn cần đảm bảo rằng bạn chỉ bao giờ gọi mã đó là ONCE hoặc bạn đang xóa trình xử lý sự kiện trước khi bắt đầu các mã mới. Vui lòng cho chúng tôi biết mã đó. – jfriend00

+0

cảm ơn bạn đã phản hồi, sẽ hiển thị trong một phút – onar

+0

Thưa tôi, tôi đang sửa mã để dễ hiểu, nó sẽ ở trong vòng 2-3 phút. trong khi bạn có thể viết ý kiến ​​của bạn về phương pháp thứ hai: đầu tiên kết nối, loại bỏ đối tượng socket ren kết nối lại. Tôi có thể sử dụng nó không? – onar

Trả lời

6

Giải pháp là:

socket.on('connect', function(){....}); 

thay đổi

socket.once('connect', function(){....}); 

Để biết thêm thông tin đọc

+0

Wooooooowww, thnx rất nhiều !! công việc này cho tôi –

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