[javascript] 브라우저에서 웹 소켓 핑 / 퐁 프레임 보내기

연결을 유지하기 위해 웹 소켓에서 핑 / 탁구 메시지에 대해 계속 읽었지만 그 내용이 확실하지 않습니다. 고유 한 프레임 유형입니까? (핑퐁과 관련된 크롬의 Javascript WebSocket 객체에는 메소드가 표시되지 않습니다). 또는 디자인 패턴 일뿐입니다 (예 : 문자 그대로 “ping”또는 다른 문자열을 서버에 보내고 응답하도록합니다). 탁구가 연속 프레임과 관련이 있습니까?

내가 묻는 이유는 Mongrel2 뒤에서 실행되는 Python 프레임 워크를 사용하고 있기 때문에 Mongrel2에 특정 Ping / Pong 메시지를 보내어 Python 앱이 필요없이 연결을 유지하도록 지시하는 방법이 있는지 궁금합니다. 그것에 대해 걱정하십시오. 별도의 HTTP 메소드가있는 것과 비슷하다고 생각합니다. 그리고 전용 핑 / 퐁 메시지 프레임이 문자열 “ping”보다 간단 할 수 있지만 (서버 및 네트워크의로드가 적을 수 있음) 너무 중요하지는 않다고 생각합니다.

편집 : 방금 RFC 6455를 보았고 Ping과 Pong이 자체 opcode로 제어 프레임 유형 인 것처럼 보입니다. Chrome의 자바 스크립트에서 Ping 프레임을 보내려면 어떻게해야합니까?



답변

핑 프레임을 보내거나 퐁 프레임을 수신하는 Javascript API가 없습니다. 브라우저에서 지원하는지 여부입니다. 브라우저가 핑 / 퐁 프레임을 지원하고 사용하는지 여부를 활성화, 구성 또는 감지하는 API도 없습니다. 이를 위해 Javascript ping / pong API 작성대한 토론 이있었습니다. 앞으로 핑을 구성 / 감지 할 수있을 가능성이 있지만 Javascript가 핑 / 퐁 프레임을 직접 보내고받을 수는 없을 것입니다.

그러나 클라이언트 및 서버 코드를 모두 제어하면 핑 / 퐁 지원을 더 높은 수준으로 쉽게 추가 할 수 있습니다. 아직 메시지가 없다면 메시지에 헤더 / 메타 데이터가 필요하지만 매우 간단합니다. 초당 핑을 수백 번 보내거나 수천 명의 동시 클라이언트를 보내려는 경우가 아니라면 직접 수행하기 위해 오버 헤드가 최소화 될 것입니다.


답변

Ping은 서버에서 클라이언트로만 전송되도록되어 있으며 브라우저는 Pong OpCode를 사용하여 가능한 빨리 자동으로 응답해야합니다. 따라서 더 높은 수준에서 걱정할 필요가 없습니다.

모든 브라우저가 표준을 지원하는 것은 아니지만 이러한 메커니즘을 구현하는 데 약간의 차이가있을 수 있으며 Pong 응답 기능이 없음을 의미 할 수도 있습니다. 그러나 개인적으로 Ping / Pong을 사용하고 있으며 이러한 유형의 OpCode를 구현하지 않는 클라이언트와 저수준 클라이언트 측 구현에서 자동 응답을 보지 못했습니다.


답변