2012-03-12 53 views
6

Tôi đã xây dựng một ứng dụng web đơn giản thực hiện một số giao tiếp thông qua một máy chủ node.js bằng cách sử dụng socket.io.Liệu socket.io có kết nối lại kết nối lại không?

Khi người dùng kết nối, nút giao tiếp lại thông tin cho khách hàng đăng ký các sự kiện nhất định. Điều đó hoạt động tốt.

Nhưng nếu bạn để trình duyệt không hoạt động, khách hàng sẽ đăng ký các sự kiện hai lần. Quá trình đăng ký các công trình như thế này:

Khi người dùng kết nối Node.js được một 'adduser' nhắn

Hai điều quan trọng mà hapen chức năng có này:

socket.on('adduser', function(data) 
    <snip> 
    socket.emit('nodeinfo', {node_id: NODE_ID}); 
    socket.emit('update', {msg: 'you are connected'}); 

các socket. phát ra ('nodeinfo') báo hiệu máy khách đăng ký các sự kiện.

Vì vậy, các khách hàng có

socket.on('nodeinfo', function(data) { ... } 

Vấn đề là nó không bao giờ nói 'bạn đang kết nối' hai lần, không ai trong số các console.log() chức năng trong 'adduser' được gọi một lần nữa về phía nút. Điều duy nhất dường như xảy ra là node.js phát ra nodeinfo một lần nữa (hoặc vì vậy client nghĩ) khiến client phải đăng ký lại.

Bất cứ ai có thể giải thích cho tôi cách kết nối lại trong công việc socket.io và điều này có thể xảy ra như thế nào?

Trả lời

4

Theo mặc định, máy khách sẽ cố gắng kết nối lại sau khi ngắt kết nối. Điều này có thể được thay đổi nếu bạn muốn: socket.io client

Nếu kết nối lại, máy chủ sẽ thấy kết nối mới và bạn có thể thực hiện logic để xác định kết nối mới với kết nối trước đó. Vì vậy, trong thực tế - thay vì thực hiện logic adduser của bạn khi "kết nối" làm điều đó (hoặc không) sau khi khách hàng gửi một số thông tin đến máy chủ.

+0

Có. Giống hệt với kết quả tôi chỉ nhận thấy điều gì xảy ra với ứng dụng của chúng tôi. cảm ơn – Xin

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