【问题标题】:How do i uniquely identify a browser (or client) whenever it's connected to server每当连接到服务器时,我如何唯一标识浏览器(或客户端)
【发布时间】:2013-06-11 08:52:12
【问题描述】:

我正在使用 Node js 和 socket.io 来实现基本的聊天应用程序。每个写入任何消息的客户端都被广播到连接到服务器的所有客户端(它是一个跨浏览器应用程序)。 现在我希望只有一个首先访问服务器的客户端可以将消息转发给所有人,而其他订阅用户只能接收消息(不能向任何人发送数据)。 我的问题是,当服务器请求向所有人发送数据时,我应该如何识别服务器上的客户端?

这是服务器端的实现:

var app = require('express')()
    , server = require('http').createServer(app)
    , io = require('socket.io').listen(server);
server.listen(3000);

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

io.set('log level', 1);

io.sockets.on('connection', function(socket) 
{
    socket.emit('news', "Hello, welcome to our conversation!<br />");
    socket.on('receive', function(data) 
    {
       //log it to console 
       console.log(data.data);
       // announce to all clients that someone sent you data.
   socket.broadcast.emit('news', "Client says: " + data.data + "<br />");
    });
});

【问题讨论】:

    标签: node.js comet


    【解决方案1】:

    您可以使用它的唯一 ID 识别每个套接字:socket.id 也许你可以做这样的事情来阻止除了第一个套接字之外的所有人广播。

    var firstClient;
    
    io.sockets.on('connection', function(socket) 
    {
        if(!firstClient){
          firstClient = socket.id;
        }
        socket.emit('news', "Hello, welcome to our conversation!<br />");
        socket.on('receive', function(data) 
        {
           if(socket.id!==firstClient){
             return; // not the first client, so not allowed to broadcast.
           }
    
           //log it to console 
           console.log(data.data);
           // announce to all clients that someone sent you data.
           socket.broadcast.emit('news', "Client says: " + data.data + "<br />");
        });
    });
    

    【讨论】:

    • 这个“id”是按顺序分配的吗?
    • 否,因为这会造成一个安全漏洞,人们可以在其中猜测其他人的套接字 ID。这是一个安全的随机数。请参阅此处了解更多信息:github.com/LearnBoost/socket.io/issues/856
    猜你喜欢
    • 2013-08-19
    • 2014-09-11
    • 2020-07-21
    • 2014-12-10
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2017-01-07
    相关资源
    最近更新 更多