Ich habe eine sehr einfache App mit socket.io
gemacht. Nun werden alle Verbindungs-IDs angezeigt: Wenn wir eine neue Browser-Registerkarte öffnen, wird eine ID hinzugefügt. Wenn wir eine Browser-Registerkarte schließen, wird die ID entfernt.Aktiviere inaktive Verbindungen
Jetzt möchte ich ein Timeout-Ereignis für einen Socket festlegen: Wenn die Schaltfläche Keep alive!
eines Tabs seit 3 Stunden nicht angeklickt wurde (vielleicht weil der Tab für 3 Stunden nicht erneut besucht wurde), berücksichtigen wir die Verbindung "semi-dead", und seine Verbindung ID grey
in der Seite von anderen Verbindungen; Wenn wir auf die Schaltfläche klicken, wird die Registerkarte aktiv und black
in anderen Seiten und startet den Countdown von 3 Stunden neu.
Weiß jemand, wie man das umsetzt?
Außerdem habe ich zwei optionalen Fragen über die Beziehungen zwischen Leerlauf-/inaktive Verbindungen trennen und Tabula Neubetrachtung:
Wenn wir nicht eine offene Lasche für lange Zeit wieder besuchen, wird es als eine Trennung betrachtet werden?
Ist es möglich, ein erneutes Besuchsereignis auf einer Browserregisterkarte festzulegen?
Mein aktuelles Back-End:
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);
})
});
Front-End:
<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>