2014-07-04 24 views
15

Birden çok kez bir socket.io bağlantısını kesmenin/bağlamanın neden çalışmadığını anlayamıyorum?socket.io istemci bağlantıyı kes

Sunucu tarafında kod:

io.on('connection', function(socket){ 
    console.log('a user connected'); 
    socket.on('disconnect', function(){ 
     console.log('user disconnected'); 
    }); 
}); 

İstemci tarafı kodu:

var socket = io(); 
socket.on('connect', function() { 
    console.log("connected from the client side"); 
}); 
$('#connect_button').click(function(){ 
    socket.connect(); 
}); 
$('#disconnect_button').click(function(){ 
    socket.disconnect(); 
}); 

Geçti bağlantısını keser. Ama tekrar bağlanmadı. Socket.io 1.0 kullanıyorum. Lütfen yardım et.

+0

Sizin örnek benim için çalışıyor. – vinayr

+0

bir kez çalışır. ama birçok kez çalışıyor mu? Benim için değil. Socket.id değişikliklerini tahmin ediyordum ve sonra bağlantı kesmek artık yeni connect'in socket.id ile ilişkili değil. Sadece bir tahmin :-) –

cevap

33

İstemcide bu yapılandırmayı denediniz mi?

// 0.9 socket.io version 
io.connect(SERVER_IP, {'force new connection': true}); 

// 1.0 socket.io version 
io.connect(SERVER_IP, {'forceNew': true}); 
+1

Tekrar denedim ve şimdi çalışır. Çalışma kodunu yayınlayacağım - başkalarına yardımcı olabilir. –

+0

Teşekkürler @jujuleder! Bu io.connect yapılandırmaları için belgelerin nerede olduğunu biliyor musunuz? Onu hiçbir yerde bulamadım. – ksloan

+0

Ayrıca not, SERVER_IP belirtmeniz gerekmez. 'io.connect ({'forceNew': true});' root url'yi kullanmayacak kadar basittir. –

19

Bu çözüm, Jujuleder'in yanıt çalışmalarına dayanır. Görünüşe göre socket.io 1.0, "zor yeni bağlantı" yerine "forceNew" - her ikisi de çalışır.

Sunucu:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendfile('s.html'); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected: ' + socket.id); 
    socket.on('disconnect', function(){ 
     console.log(socket.name + ' has disconnected from the chat.' + socket.id); 
    }); 
    socket.on('join', function (name) { 
     socket.name = name; 
     console.log(socket.name + ' joined the chat.'); 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

İstemci (s.html):

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title></title> 
    <style>button{width: 100px;}input{width: 300px;}</style> 
</head> 
<body> 

<ul id="messages"></ul> 

<button id="disconnect">disconnect</button> 
<button id="connect">connect</button> 

<script src="/socket.io/socket.io.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script> 

    var socket = io.connect('http://localhost:3000'); 

    $('#disconnect').click(function(){ 
     socket.disconnect(); 
    }); 
    $('#connect').click(function(){ 
//  socket.socket.reconnect(); 
//  socket = io.connect('http://localhost:3000',{'force new connection':true }); 
     socket = io.connect('http://localhost:3000',{'forceNew':true }); 
     socket.on('connect', function(msg){ 
      socket.emit('join', prompt('your name?')); 
     }); 
    }); 
    socket.on('connect', function(msg){ 
     socket.emit('join', prompt('your name?')); 
    }); 
    socket.on("disconnect", function(){ 
     console.log("client disconnected from server"); 
    }); 

</script> 
</body> 
</html> 
+5

Tek bir tarayıcı isteği ile çift soket bağlantısı oluşturmaya başlamayalım. Bu böcekle barış yaptım. –

+1

Yeni bağlantı için önceki dinleyici olaylarını işlemek mümkün değil mi? Soket bağlantısına yeni dinleyiciler eklemek gerekli mi? – Vishnu

+0

@KayaToast Bunu nasıl düzeltirim? –

İlgili konular