【问题标题】:Activate idle/inactive connections激活空闲/非活动连接
【发布时间】:2017-07-14 08:19:47
【问题描述】:

我用socket.io 做了一个非常简单的应用程序。现在,它会显示所有的连接 ID:当我们打开一个新的浏览器选项卡时,它会添加一个 ID;当我们关闭浏览器选项卡时,它会删除 id。

现在,我想为任何套接字设置一个超时事件:如果一个标签的按钮Keep alive! 3 小时没有被点击(这可能是因为标签没有被重新访问 3 小时),我们考虑连接“半死”,并在其他连接页面中设置其连接IDgrey;当我们点击按钮时,tab变为活动状态,其他页面black,并重新开始倒计时3小时。

有人知道如何实现吗?

此外,我有两个关于空闲/非活动连接、断开连接和标签重新访问之间关系的可选问题:

  1. 如果我们长时间不重新访问打开的标签页,是否会被视为断开连接?

  2. 是否可以在浏览器选项卡上设置重访事件?

我目前的后端:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var ids = [];

server.listen(3000);

app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket) {
    ids.push(socket.id); 
    io.sockets.emit('ids', ids);

    socket.on('disconnect', function () {
        var index = ids.indexOf(socket.id);
        ids.splice(index, 1);
        io.sockets.emit('ids', ids);    
    })
});

前端:

<button type="button" onclick="alert('Keep alive!')">Keep alive!</button>
<div id="ids"></div>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
    jQuery(function($) {
        var socket = io.connect();
        var $ids = $('#ids');

        socket.on('ids', function (data) {
            var html ="";
            for (i = 0; i < data.length; i++) {
                html += data[i] + "<br/>";
            };
            $ids.html(html);
        })
    });
</script>

【问题讨论】:

    标签: javascript sockets socket.io timeout session-timeout


    【解决方案1】:

    Socket.io 使用心跳(0.9.x 版本)或使用 ping(1.x 及以上版本)管理超时。一旦你在服务器上设置了这些超时,并且如果客户端是 socket.io 兼容的,那么套接字将永远不会自动断开连接。当然,如果它失去网络或网络超时或有人断开它,它会断开连接。

    请参阅当前 socketio 规范中的以下文本:

    在这些选项中:

    pingTimeout (Number): 考虑多少毫秒没有 pong 数据包 连接关闭(60000) pingInterval(Number): 多少毫秒 在发送新的 ping 数据包之前 (25000)。

    socket.io 客户端将不断发送 ping 或心跳以进行 确保连接有效

    因此,如果您的选项卡已打开并且没有活动,则您必须在应用程序级别而不是在 socket.io 级别进行管理。

    为此,您可以使用计时器并检查您何时从某个套接字接收到数据。定期计时器可以跟踪活动并在您的 3 小时期限到期后更改状态

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2011-05-16
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多