激活空闲/非活动连接



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

现在,我想为任何套接字设置一个超时事件:如果在3个小时内尚未单击选项卡的按钮Keep alive!(这可能是因为Tab尚未重新访问3个小时),我们考虑连接"半决赛",并在其他连接页面中制作其连接ID grey;当我们单击按钮时,选项卡将变为活着,在其他页面中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>

socket.io使用心跳(0.9.x版本)或使用ping(版本1.x)管理超时。一旦在服务器上设置了这些超时,并且如果客户端为socket.io兼容,则插座将永远不会自动断开连接。当然,它会断开连接是否失去网络,网络超时或某人断开连接。

请参阅当前套接字规格的下面文本:

在这些选项中:

pingTimeout(数字):有多少个没有乒乓数据包的MS 连接关闭(60000) pingInterval(编号):多少毫秒 在发送新的Ping数据包(25000)之前。

socket.io客户端将继续发送ping或心跳来制作 确保连接还活着

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

要执行同样的操作,您可以使用计时器并检查何时从某个插座收到数据。周期性计时器可以跟踪活动并改变状态,一旦您3小时到期

相关内容

  • 没有找到相关文章

最新更新