Javascript Socket.io在断开连接时删除标记

Javascript Socket.io在断开连接时删除标记,javascript,socket.io,Javascript,Socket.io,我有一个项目,当用户登录时在地图上绘制标记。 但是,在用户注销后,标记将保留 我试图写一个断开连接的函数来破坏这个标记。 但它不起作用 我需要客户端的东西吗 服务器端 // Socket markers start io.on('connection', function(socket) { socket.on('marker', function(data) { data.socketId = socket.id; User.findById(socket.request.sess

我有一个项目,当用户登录时在地图上绘制标记。 但是,在用户注销后,标记将保留

我试图写一个断开连接的函数来破坏这个标记。 但它不起作用

我需要客户端的东西吗

服务器端

// Socket markers start

io.on('connection', function(socket) {

socket.on('marker', function(data) {
  data.socketId = socket.id;
  User.findById(socket.request.session.passport.user, function(err,    user){
    if(user){
      data.socketId = socket.id;
      data.user = user;
      markers.push(data);
      console.log(markers);
      // markers[socket.id] = data;

      io.emit('show-marker', markers);
    }
  });
});
// socket.on('show-marker', )
socket.on('show-user-location', function(data) {
  io.emit('show-user-location', data);
});

socket.on('disconnect', function(){
  console.log( socket.name + ' has disconnected from the chat.' + socket.id);
  delete markers[socket.id];
});


});

我猜
标记
是一个数组,因为您使用了
push
。因此,
删除标记[socket.id]
无法正常工作。您必须搜索它-迭代所有项目,检查id是否匹配,然后使用
splice

因此,最好使用
Object
存储标记,如:

// on connect
markers[data.id] = data;

// on disconnect
delete markers[socket.id]
如果仍要使用阵列,这将适用于您:

// on disconnect
for (var i = 0; i < markers.length; i++) { // loop through all markers
    if (socket.id == markers[i].id) { // find the one you need
        markers.splice(i, 1); // remove it from array
        break; // stop searching - already found it
    }
}
//断开连接时
对于(var i=0;i
客户端如何知道删除标记?使用
删除标记[socket.id]
删除后,是否应再次发出带有更新标记列表的“
'show-marker”
事件?是更正数组。。。所以我们需要通过检查删除正确的标记?socket.on('disconnect',function(){for(i=0;i)更新了我的答案以包含数组用法。