2013-05-28 24 views
8

yeniden bağlandıktan sonra bir bağlantı daha oluşturur socket.io ve node.js. ile basit bir sohbet uygulaması here çalışıyorum Node.js sunucusunu her yeniden başlattığımda, socket.io otomatik olarak yeniden bağlanır ve bir şekilde sunucuya bir tane daha bağlantı oluşturur, yani istemci artık iki kez aynı sohbet mesajını alır. Bunu nasıl düzeltirim?socket.io,

cevap

13

Soket bağlantısını kesmek için varsayılan olarak, connect olayını çalıştıran kaybolan bağlantıyı yeniden bağlar. Böylece her yeniden bağlandığında, mesajları almak için bir tane daha olay dinleyicisi eklersiniz. Böylece, sunucu yeniden başlatmaya/bağlantı kaybına eşit sayıda mesaj alırsınız. İlk dinlemelisin

Incoming Chat: 
Connected 
dsdadsada 
Disconnected       //recieved by 1st listener 
Connected       //added 2nd listener 
adasd 
Disconnected       //recieved by 1st listener 
Disconnected       //recieved by 2nd listener 
Connected       //added 3rd listener 

sadece eventhandler ilk kez çalıştığı yerine on ait once kullanarak bağlayın.

iosocket.on('connect', function() { 
     $('#incomingChatMessages').append($('<li>Connected</li>')); 
}); 

iosocket.on('message', function(message) { 
     $('#incomingChatMessages').append($('<li></li>').text(message)); 
}); 

iosocket.on('disconnect', function() { 
     $('#incomingChatMessages').append('<li>Disconnected</li>'); 
}); 
diğer 2 Olay Dinleyicilerine neden olabilir

kayıtlı edildi: yerine bu şekilde index.html yazmak için

iosocket.once('connect', function() { 

yerine

iosocket.on('connect', function() { 
+0

İdeal olarak, bağlantıda olay dinleyicileri (veya başka uygulama özellikleri) eklememelisiniz. – Shamps

+0

Sunucu tarafında, bu bir ad alanı kullanılarak düzeltilebilir. Bu, sunucudaki istemcinin toe 'connect' olayı için de bir kere kullanmanıza izin verir. Ne yazık ki, biz doğrudan sunucu için '' 'değil:' io.once ('connect', (soket: SocketIO.Socket) => {}) 'TS'de bir hata verdi, io.of ise '/xyz').once('connect', (soket: SocketIO.Socket) => {}) 'iyi çalışıyor. – Lion

5

deneyin deneyin bağlantı olayı. İstemcinin bağlantısı kesildiğinde, diğer 2 dinleyici hala burada olacak ve kayıt dışı bırakılmayacaktır.

+1

Bence çözümünüz daha iyi. BURADA ÖNEMLİ BİR İŞLETMENİN MÜŞTERİ HATASINDA OLDUĞUNDAN, 'BAĞLANTI' OLAYLARINDAN DİĞER ETKİNLİKLERİ SİZE SUNUYORSUNUZ. (BAĞIMSIZ OLAYI YER ALAN) –