WebSocket 대 긴 폴링 HTTP
나는 최근에 채팅 기록을 서버 측 DB에 저장하기 위해 AJAX를 사용하여 Chatapp에서 작업했습니다. 서버 측도 Socket.io를 실행합니다. AJAX는 서버 측의 DB에 채팅 데이터를 GET/POST하는 것이기 때문에 Socket.io 클라이언트도 socket.io에 대해 HTTP AJAX 폴링을 사용할 것이라고는 예상하지 못했지만 AJAX를 통해 HTTP 폴링을 사용했습니다.
다음은 AJAX를 통한 HTTP 긴 폴링과 WebSocket 전용의 차이점에 대한 간략한 설명입니다.
AJAX를 통한 긴 폴링을 통해 서버는 WSGI 서버를 계속 폴링하여 새 데이터를 확인합니다. HTTP는 서버가 빈번한 데이터를 클라이언트에 보내기 위해 연결을 열어두기 위한 것이 아닙니다. 다음은 AJAX 요청을 통해 긴 폴링을 구현하는 일종의 오래된 방법입니다.
WebSocket을 사용하면 서버 응답(또는 데이터 푸시)이 더 효율적입니다. 서버 측은 페이로드 패킷을 클라이언트에 계속 보낼 필요가 없습니다. 그 이점은 서버가 많은 수의 클라이언트에 서비스를 제공할 때 더욱 두드러집니다.
여전히 AJAX와 Socket.io를 함께 사용해야 하는 경우 여전히 Socket.io가 Websocket만 사용하도록 강제할 수 있습니다. 다음 방법은 클라이언트와 서버 간에 Websocket을 시작하기 위한 초기 XHR 요청도 제거합니다. 그것은 환상입니다!
서버 측:
다음의 두 번째 줄은 서버가 WebSocket만 사용하도록 강제할 수 있습니다.
module.exports = function(io) {
io.set('transports', ['websocket']);
io.on('connection', socket => {
socket.on('join', params => {
고객 입장에서:
다음의 첫 번째 줄은 동일한 클라이언트 코드에서 AJAX를 사용하더라도 Socket.io 클라이언트에게 WebSocket만 사용하도록 지시합니다.
const socket = io({ transports: ['websocket'] });
const postMessage = function(message) {
$.post('http://localhost:5000/api', message);
};
이 간단한 트릭은 이전 IE9를 제외한 최신 웹 브라우저에서 잘 작동합니다. XHR 폴백을 피하고 WebSockt 전송만 사용하는 것이 좋습니다.
참조:
https://www.fullstackpython.com/websockets.html
Reference
이 문제에 관하여(WebSocket 대 긴 폴링 HTTP), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/moz5691/websocket-vs-long-polling-http-412f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)