WebSocket 대 긴 폴링 HTTP

3635 단어 websockethttpsocketio
WebSocket은 클라이언트와 서버 간의 양방향 데이터 전송을 위한 표준 프로토콜입니다. webSocket 프로토콜은 HTTP 프로토콜을 통해 실행되지 않고 TCP를 기반으로 합니다. 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

좋은 웹페이지 즐겨찾기