如何在服务器端关闭sockjs连接?



所以,每次刷新页面时,似乎sockjs正在创建一个新的连接。

我在每个通道上保存每个消息到我的mongodb。onmessage,所以如果我刷新我的页面7次并发送消息,我将保存相同内容的7条消息到我的mongodb。

这是非常有问题的,因为当我检索这些消息时,当我进入聊天室,查看日志,我会看到一堆重复的消息。

我想跟踪所有"活动"的连接,如果用户试图建立另一个连接,我希望能够从服务器端强制关闭旧的连接,所以每次只有1个连接侦听每个消息

我该怎么做呢?

var connections = {};
//creating the sockjs server
var chat = sockjs.createServer();
//installing handlers for sockjs server instance, with the same url as client
chat.installHandlers(server, {prefix:'/chat/private'});
var multiplexer = new multiplexServer.MultiplexServer(chat);
var configChannel = function (channelId, userId, userName){
  var channel = multiplexer.registerChannel(channelId);
  channel.on('connection', function (conn) {
    // console.log('connection');
    console.log(connections);
    connections[channelId] = connections[channelId] || {};
    if (connections[channelId][userId]) {
      //want to close the extra connection
    } else {
      connections[channelId][userId] = conn;
    }
    // }

    // if (channels[channelId][userId]) {
    //   conn = channels[channelId][userId];
    // } else {
    //   channels[channelId][userId] = conn;
    // }
    // console.log('accessing channel! ', channels[channelId]);
    conn.on('new user', function (data, message) {
      console.log('new user! ', data, message);
    });
    // var number = connections.length;
    conn.on('data', function(message) {
      var messageObj = JSON.parse(message);
      handler.saveMessage(messageObj.channelId, messageObj.user, messageObj.message);
      console.log('received the message, ', messageObj.message);
      conn.write(JSON.stringify({channelId: messageObj.channelId, user: messageObj.user, message: messageObj.message }));
    });
    conn.on('close', function() {
      conn.write(userName + ' has disconnected');
    });
  });
  return channel;
};

直接使用.close:

if (connections[channelId][userId]) {
  // want to close the extra connection
  connections[channelId][userId].close();
} else {
  connections[channelId][userId] = conn;
}

相关内容

  • 没有找到相关文章