Socket.io在刷新/重新加载

时间:2018-01-07 12:45:34

标签: javascript node.js express socket.io rethinkdb

我遇到了这个问题: https://github.com/rethinkdb/rethinkdb/issues/6503

我第一次连接时,它控制台.logs 1次。 如果我刷新它console.log 2次。 如果我再次刷新,它会控制台记录3次。等等。在每次重新加载时再添加一个console.log / run。与socket.emit相同。它会在每次重新加载时不断增加1个。

在上面的链接中,他使用以下代码描述了如何修复它:

options.socket.on('close', () => {
  conn.close({ noreplyWait: false });
});

我很想测试这个,但不知道怎么做?任何人都可以帮助我朝着正确的方向前进吗?

我的服务器代码如下所示:

io.on('connection', function(socket){
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });

客户端代码:

var url = 'http://'+top.location.hostname+':4200';
var socket = io.connect(url);

socket.on('group', function(msg){
  console.log(msg);
  if (msg != null) {
    $('span#groupName').html(msg['groupName']);
  }else{
    $('span#groupName').html('Not member of any group yet');
  }

});

我还找到了以这种方式解决问题的人:https://gist.github.com/jamilservicos/e7c09e3701a7ba5ff817096ef8426d94

它只是为了一个我认为不应该成为问题的小东西的代码。我在上面的代码中做错了吗?

知道如何解决问题或如何从第一个链接测试解决方案?

1 个答案:

答案 0 :(得分:1)

我终于解决了!

我补充说:

io.removeAllListeners();

正下方:

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

所以现在它看起来像这样:

io.on('connection', function(socket){
        io.removeAllListeners();
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });

它可以工作,我不会再收到多个消息/ console.logs或者发出。