我做了一個非常簡單的應用程序socket.io
。現在,它顯示所有的連接ID:當我們打開一個新的瀏覽器選項卡時,它會添加一個ID;當我們關閉瀏覽器選項卡時,它將刪除該ID。激活閒置/非活動連接
現在,我想對於任何插座設置一個超時事件:如果一個標籤的按鈕Keep alive!
還沒有被點擊3小時(這也許是因爲標籤還沒有被重新走訪3小時),我們認爲連接「半死」,並且在其他連接的頁面中使其連接ID爲grey
;當我們點擊該按鈕時,該選項卡變爲活動狀態,並在其他頁面中顯示black
,並重新開始倒計時3小時。
有誰知道如何實現這個?
此外,我有空閒/活動的連接,斷開以及片重訪之間的關係,兩個可選問題:
如果我們不重遊了很長一段時間開放的選項卡,將它被視爲斷開連接?
是否可以在瀏覽器選項卡上設置重新訪問事件?
我現在的後端:
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>