Javascript JS Socket |在站点上添加完整阵列

Javascript JS Socket |在站点上添加完整阵列,javascript,node.js,sockets,Javascript,Node.js,Sockets,所以我的插座系统有点问题。我有一个数组,如果与站点建立新连接,它将被释放,但问题是它将在所有用户上被调用。因此,如果我有console.log('new user'),那么每个人都会将它发送到控制台。我的问题是,我如何才能做到只有一个刚刚连接的用户才能接收到它 这是我的服务器 io.on('connection', function(client){ clients.push(client.id); io.emit('add games', coinflips); //T

所以我的插座系统有点问题。我有一个数组,如果与站点建立新连接,它将被释放,但问题是它将在所有用户上被调用。因此,如果我有
console.log('new user')
,那么每个人都会将它发送到控制台。我的问题是,我如何才能做到只有一个刚刚连接的用户才能接收到它

这是我的服务器

io.on('connection', function(client){
    clients.push(client.id);
        io.emit('add games', coinflips); //This is the line
    console.log(clients);
    client.on('disconnect', function(){
        clients.splice(client.indexOf, 1);
        console.log(clients);
    });
});
这是如何处理的

socket.on('add games', function(data){
    if(data.length > 0){
        addGames(data);
    }
});

您可以使用套接字id,
socket.id
然后发送到该id。 沿着这条线

io.of('/mynamespace').sockets[socketID].emit(...)
这个逻辑可能会起作用

clients = [];
然后,每当建立连接时

 clients.push(socket);
然后在clients数组中,只需索引它

clients[0].emit(...)
这是连接时获取id的方式

console.info('Client id (id=' + socket.id + ').');
IO允许您“命名”套接字,这本质上意味着分配不同的端点或路径

名称空间是一种非常有用的特性,它可以最大限度地减少资源(TCP连接)的数量,同时通过在通信通道之间引入分离来分离应用程序中的关注点。多个名称空间实际上共享相同的WebSockets连接,从而节省了服务器上的套接字端口

---------------------------------------------------------------
名称空间是在服务器端创建的。但是客户端通过向服务器发送请求来加入它们

---------------------------------------------------------------
默认名称空间 根命名空间“/”是默认命名空间,如果客户端在连接到服务器时未指定命名空间,则客户端将加入该命名空间。使用套接字对象客户端与服务器的所有连接都是到默认名称空间的

--------------------------------------------------------
自定义名称空间 我们可以创建自己的自定义名称空间。要设置自定义命名空间,我们可以在服务器端调用of函数:

---------------------------------------------------------
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
console.log('someone connected');
nsp.emit('hi', 'Hello everyone!');
});
http.listen(3000, function(){
console.log('listening on localhost:3000');
});

感谢您的快速回答,但是/mynamespace指向什么?如果您阅读了文档,您可以创建自定义名称空间来侦听并相应地发出事件。如果您愿意,您可以使用默认名称空间。有关名称空间问题的更直接解释,请查看更新答案。