Socket.IO始终发送到最后连接的客户端

时间:2015-01-20 17:08:42

标签: javascript node.js sockets websocket socket.io

我的Socket.IO(Node.JS)有问题。 我尝试向发出请求的客户端发出一些内容,但Socket.IO会回复最新连接的客户端。 例如:我将计算机连接到网站,然后连接我的笔记本电脑。现在我用我的电脑提出请求,但我的笔记本电脑正在得到答案。 我的代码如下所示:

服务器:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server, { log: false });
var socket = socket;

io.sockets.on('connection', function (socket_) {
    socket = socket_;

    socket.on('dl_me', function (result) {
        downloadTrack(result, result.song_uri);
        if (typeof callback == 'function' ) {
            callback({
                success: success
            });
        }
    });
});

var downloadTrack = function(result, uri) {
    socket.emit('gotodownload', {
        id: generated_number
    });
}

客户端:

var socket = io.connect( window.location.href );
socket.on('gotodownload', function(result) {
    var linktodl = window.location.host + '/getme/' + result.id;
    document.getElementById('dlbutton').innerHTML = '<a href="http://' + linktodl + '">Download!</a>'
});

这不是完整的代码,而是每个相关的socket.io部分。

1 个答案:

答案 0 :(得分:0)

尝试将套接字对象传递给downloadTrack函数:

// Add an argument for the socket object.
var downloadTrack = function(socket, result, uri) {
    socket.emit('gotodownload', {
        id: generated_number
    });
}

修改dl_me事件中的代码以调用函数:

socket.on('dl_me', function (result) {

    // Pass the socket to the function.
    downloadTrack(socket, result, result.song_uri);

    // ...
});