socket.io - 第一次工作,而不是第二次工作

use*_*745 10 websocket node.js express socket.io

当我启动node.js服务器并且客户端连接时,我能够从客户端发送请求(socket.emit)并获得响应(socket.on('rentsAround'....)).但是当我第二次连接时,客户端可以发送,但服务器无法发送或发送.所以我必须重新启动服务器.我知道它按预期工作,但某种程度上我的理解是错误的...有人请指出.

客户端:========

    var socket = new io.Socket();
    socket = io.connect();

    socket.on('rentsAround', function(data){
        registration.handleRentsAround(data);
    });


    socket.on('locationDetailsRes', function(data){
        registration.handleRentsAround(data);
    });

    socket.on('connect', function(data){
        alert('inside connect on client side');
    });

socket.on('disconnect', function(){ 
    // do something, if you want to. 
    });
    .............
    socket.emit("searchRent",  {"lat":lat, "lng":lng});
Run Code Online (Sandbox Code Playgroud)

服务器端:========

socket.sockets.on('connection', function(client){ 

            client.on('searchRent', function(msg){
        console.log('inside on connection');
                // do something and reply back
        client.emit('rentsAround',{"totalRents":docs.length, "rents":docs});
            });

   client.on('disconnect', function(){ 
        sys.puts("client disconnect"); 
        mongoose.disconnect();
        }); 
Run Code Online (Sandbox Code Playgroud)

Jos*_*eph 30

Socket.io 0.7以后将尝试重用连接到同一主机.根据我的经验,我发现这种行为可能有点松懈.

我无法从您提供的小代码示例中看出,但我怀疑问题是第二次调用connect()是试图重用第一个(关闭)连接.

解决方法是'force new connection'在调用时传递选项connect().例如:

io.connect("http://localhost", {'force new connection': true});

  • 感谢'强迫新连接'......我不知道这个. (3认同)