2017-02-23 10 views
1

socket.io으로 매우 간단한 앱을 만들었습니다. 이제는 모든 연결 ID를 표시합니다. 새 브라우저 탭을 열면 ID가 추가됩니다. 브라우저 탭을 닫으면 ID가 제거됩니다.유휴/비활성 연결 활성화

이제 어떤 소켓에 대해서도 하나의 timeout 이벤트를 설정하고 싶습니다. Keep alive!의 탭이 3 시간 동안 클릭되지 않았다면 (이는 해당 탭이 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> 

답변

1

Socket.io 하트 비트 (0.9.x 버전)을 사용하거나 핑 (버전 1을 사용하여 제한 시간을 관리 .x 이후). 서버에서 이러한 시간 제한을 설정하고 클라이언트가 socket.io를 준수하면 소켓은 절대로 자동으로 연결이 끊어지지 않습니다. 물론 네트워크 나 네트워크 타임 아웃이 끊어 지거나 누군가가 연결을 끊을 경우 연결이 끊어집니다. 60000 (퐁 패킷없이 많은 MS는 연결이 폐쇄 을 고려하는 방법 : 이러한 옵션 중

:

pingTimeout (수)

은 아래 현재 socketio 사양에서 텍스트를 참조하십시오) pingInterval (개수) : 새 ping 패킷 (25000)을 보내기 전에 얼마나 많은 ms .

socket.io 클라이언트는 연결이

살아 확인 핑 또는 하트 비트를 보내는 유지합니다.

따라서 탭이 열려 있고 활동이없는 경우 socket.io 수준이 아닌 애플리케이션 수준에서 관리해야합니다.

동일한 작업을 수행하려면 타이머를 사용하고 특정 소켓에서 데이터를 받았을 때를 확인할 수 있습니다. 주기 타이머는 3 시간 기간이 만료되면 활동을 추적하고 상태를 변경할 수 있습니다.