2016-10-24 31 views
0

Linode 서버에서 node.js와 socket.io를 사용하고 있습니다. Linode NodeBalancer를 사용하려면 KeepAlives를 내 앱과 사용해야한다고 들었습니다. 나는 또한 KeepAlive를 비활성화하는 HTTP 또는 HTTPS 대신 TCP를 사용하도록 NodeBalancer 프로토콜을 설정해야한다고 들었다.socket.io가 자동으로 Keepalives를 처리합니까?

제 질문은 KeepAlives가 기본적으로 socket.io에 이미 구현되어 있습니까? 연결을 유지하는 무언가가있는 것 같아서 socket.io가 이미 처리하고 있다고 생각합니다. 그러나이 주제에 대한 정보는 찾을 수 없습니다. KeepAlives가 socket.io에서 기본적으로 구현되지 않으면 NodeBalancer를 사용하여 어떤 문제가 발생합니까? KeepAlives를 구현해야한다면 앱에서 구현하기 위해 어떤 단계를 수행해야합니까?

추가 질문으로, KeepAlives가 socket.io에 구현되어있는 경우 TCP가 아닌 HTTP 옵션을 사용하면 어떤 문제가 발생합니까?

+0

을? socket.io http 폴링을 의미합니까? 어, 왜 세계에서 그렇게 할거야? 폴링은 webSocket 연결보다 효율적이지 않습니다. 참고로, HTTP와 socket.io 모두 TCP를 사용하므로 왜 TCP 옵션 하나를 호출하는지 모르겠습니다. 그리고 완전성을 위해 socket.io 연결도 HTTP 요청으로 시작됩니다. – jfriend00

+0

@ jfriend00 HTTP 옵션은 Linode NodeBalancer에서 사용할 수있는 HTTP 옵션을 의미합니다 (첫 번째 단락에서 언급했듯이). – kojow7

답변

2

제 질문은 KeepAlives가 socket.io에 이미 구현되었습니다. 이 기본값입니까?

예, ping 패킷 (아주 작은 웹 소켓 패킷)는 하트 비트에 "테스트"연결로 너무 자주 매를 전송되고 있는지 여전히 작동하고 생존을 유지 할 수 있습니다. pong 패킷은 ping 요청에서 반환되므로 발신자는 ping이 통과했는지 여부를 알고 있습니다.

socket.io이 핑 측면은 매우 저조한 문서화되어 있지만, 사용을 Socket.IO에 source code of engine.io를 검사하는 것입니다, 모두가있는 pingTimeout (A pong 응답을 기다리는과는 pingInterval (A를 얼마나 자주 보내는 시간 ping).

+0

@ kojow7 -이 질문에 대한 답변을 얻었습니까? – jfriend00

3

예. 그리고 당신은 옵션을 설정할 수 있습니다. 당신은 HTTP 옵션을 의미합니까 무엇

var myApp = require('express')(); 
 
var http = require('http').Server(myApp); 
 

 
var io = require('socket.io')(http, {'pingTimeout': 7000}, 'pingInterval': 3000);