Javascript Node.js:删除Socket.IO中的用户

Javascript Node.js:删除Socket.IO中的用户,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我在删除Socket.IO中的用户时遇到问题,当他们的浏览器关闭时,阵列中的用户,用户[]未被删除和更新,我还想更新客户端中的用户。您能帮助我以编程方式删除用户吗?这是我的代码伙计们,我希望你们能帮助我使用下面提供的代码。我已经在网上浏览过如何删除用户,但我真的无法让它工作。提前谢谢各位 这是我的server.js: var redis = require('redis'); var express = require('express'); var app = express(); var h

我在删除Socket.IO中的用户时遇到问题,当他们的浏览器关闭时,阵列中的
用户
用户[]
未被删除和更新,我还想更新客户端中的用户。您能帮助我以编程方式删除用户吗?这是我的代码伙计们,我希望你们能帮助我使用下面提供的代码。我已经在网上浏览过如何删除用户,但我真的无法让它工作。提前谢谢各位

这是我的server.js

var redis = require('redis');
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var publish = redis.createClient();
var subscribe = redis.createClient();

server.listen(8080);

var users = [];
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.on('adduser', function (user) {
    users[user] = user;
    console.log(users);
  });

  socket.on('disconnect', function (user) {
    delete users[user] = user;
    io.sockets.emit('update', user);

    // delete users[user] = users;
    // socket.emit('update', users);
    console.log(users)
  });

  socket.on('update', function () {
    users[user] = user;
    console.log('Current users: ', users);
  });
});
<html>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
  var socket = io.connect('http://localhost:8080');
  socket.on('connect', function(){
    socket.emit('adduser', prompt("What's your name?"));
  });
</script>

<div style="float:left;width:150px;border-right:2px solid black;height:510px;padding:10px;overflow:scroll-y;text-align:center;">
    <b>Users</b>
    <div id="users"></div>
</div>
</html>
这是我的client.html

var redis = require('redis');
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var publish = redis.createClient();
var subscribe = redis.createClient();

server.listen(8080);

var users = [];
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.on('adduser', function (user) {
    users[user] = user;
    console.log(users);
  });

  socket.on('disconnect', function (user) {
    delete users[user] = user;
    io.sockets.emit('update', user);

    // delete users[user] = users;
    // socket.emit('update', users);
    console.log(users)
  });

  socket.on('update', function () {
    users[user] = user;
    console.log('Current users: ', users);
  });
});
<html>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
  var socket = io.connect('http://localhost:8080');
  socket.on('connect', function(){
    socket.emit('adduser', prompt("What's your name?"));
  });
</script>

<div style="float:left;width:150px;border-right:2px solid black;height:510px;padding:10px;overflow:scroll-y;text-align:center;">
    <b>Users</b>
    <div id="users"></div>
</div>
</html>

var socket=io.connect('http://localhost:8080');
socket.on('connect',function(){
emit('adduser',prompt(“你叫什么名字?”);
});
使用者

再次感谢各位,我希望你们能帮助我:)

服务器端的
断开连接
事件的回调中不会有
用户
变量,因此您可以有效地使用
删除用户[null]
。相反,您应该将
user
变量存储在特定于套接字的数据存储中,如下所示:

var io = require('socket.io').listen();
var users = [];

io.sockets.on('connection', function(socket) {
  socket.on('adduser', function(user) {
    socket.set('username', user, function() {
      users[user] = user;
    });
  });

  socket.on('disconnect', function() {
    socket.get('username', function(err, user) {
      delete users[user];
      io.sockets.emit('update', users);
    });
  });
});

当套接字断开连接时,您可以找到其关联的
user
变量,然后将其删除。

服务器端
disconnect
事件的回调中不会有
user
变量,因此您可以有效地使用
delete users[null]
。相反,您应该将
user
变量存储在特定于套接字的数据存储中,如下所示:

var io = require('socket.io').listen();
var users = [];

io.sockets.on('connection', function(socket) {
  socket.on('adduser', function(user) {
    socket.set('username', user, function() {
      users[user] = user;
    });
  });

  socket.on('disconnect', function() {
    socket.get('username', function(err, user) {
      delete users[user];
      io.sockets.emit('update', users);
    });
  });
});

当套接字断开连接时,您可以找到其关联的
user
变量,然后将其删除。

它工作得很好!谢谢@hex氰化物!我错过了
users[user]=user
之前的
socket.user=user
。这段代码也适用于socket.on('adduser',function(user){socket.user=user;users[user]=user;console.log(users);})效果很好!谢谢@hex氰化物!我错过了
users[user]=user
之前的
socket.user=user
。这段代码也适用于socket.on('adduser',function(user){socket.user=user;users[user]=user;console.log(users);})