2014-07-04 31 views
15

Tôi không thể tìm ra lý do tại sao ngắt kết nối/kết nối socket.io nhiều lần không hoạt động?socket.io khách hàng kết nối ngắt kết nối

server side code:

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

Khách hàng mã phía:

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(); 
}); 

Nó ngắt kết nối ổn. Nhưng không kết nối lại. Tôi đang sử dụng Socket.io 1.0. Hãy giúp tôi.

+0

dụ của bạn làm việc cho tôi. – vinayr

+0

nó hoạt động một lần. nhưng nó có hoạt động nhiều lần không? Nó không dành cho tôi. Tôi đã đoán những thay đổi socket.id và sau đó ngắt kết nối không còn kết hợp với socket.id của kết nối mới. Chỉ cần đoán :-) –

Trả lời

33

Bạn đã thử cấu hình này trong ứng dụng khách chưa?

// 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

Tôi đã thử lại, và bây giờ nó hoạt động. Tôi sẽ đăng mã làm việc - nó có thể giúp người khác. –

+0

Cảm ơn @jujuleder! Bạn có biết tài liệu cho các cấu hình io.connect này ở đâu không? Tôi không thể tìm thấy nó ở bất cứ đâu. – ksloan

+0

Cũng lưu ý, bạn không cần phải chỉ định SERVER_IP. 'io.connect ({'forceNew': true});' sẽ chỉ đơn giản là mặc định để sử dụng url gốc. –

19

Giải pháp này, dựa trên công trình của Jujuler. Rõ ràng trong socket.io 1.0, nó là "forceNew" thay vì "force new connection" - cả hai đều hoạt động.

Server:

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'); 
}); 

Khách hàng (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

Chúng ta không nên bắt đầu với một yêu cầu trình duyệt duy nhất tạo ra các kết nối ổ cắm đôi. Tôi đã thực hiện hòa bình với lỗi đó. –

+1

Không thể xử lý các sự kiện nghe trước đó cho kết nối mới? Tôi có cần thêm người nghe mới vào kết nối socket không? – Vishnu

+0

@KayaToast Làm cách nào để khắc phục sự cố này? –

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