我在删除 Socket.IO 中的用户时遇到问题,当他们的浏览器关闭时,数组中的user
users[]
不会被删除也没有更新,我还想更新客户端的用户。你能帮我以编程方式删除用户吗?这是我的代码家伙,我希望你能帮助我使用下面提供的代码。我已经在网上浏览了如何删除用户,但我无法真正使其工作。提前感谢伙计们。
这是我的服务器.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:
<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>
再次感谢伙计们,希望你能帮我:)
服务器端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
变量,然后将其删除。