如何在连接到服务器时唯一标识浏览器(或客户端)

时间:2013-06-11 08:52:12

标签: node.js comet

我正在使用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 />");
    });
});

1 个答案:

答案 0 :(得分:2)

您可以使用它的唯一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 />");
    });
});