2017-05-01 1 views
0
  1. 일반적으로 데이터를 가져 오거나 게시하려면 ajax http 요청을 사용합니다. 지금 내가 왜 소켓 아이오와 모든 아약스 요청을 대체해서는 안 같은 생각을 가지고?이 접근 방식을 따르는 데 어떤 단점이 있습니까?
  2. HTTP 헤더를 통한 세션 쿠키는 클라이언트가 서버를 사용하여 http : // http 요청을 요청할 때마다 클라이언트와 서버간에 전송된다는 것을 알고 있습니다. 브라우저의 세션 쿠키가 소켓 헤더를 통해 자동으로 서버로 전송됩니다 (if 그 존재)?
  3. 내가 usecases에서 Http보다 SocketIO를 선호해야합니까? 서버가 어떤 이벤트에 대한 클라이언트에 약간의 실시간 정보를 보낼 필요가있을 때

답변

1

WebSocket을 유용합니다 (당신은 폭 넓은 답을 요구하는 질문이 몇 가지 관련 기사에 저를 연결할 수 있습니다으로 이것을 고려한다면) 그 서버에서 발생했습니다. 이렇게하면 클라이언트가 여러 폴링 AJAX 호출을 수행하여 서버에서 이벤트가 발생했는지 확인할 수 없습니다.

간단한 채팅 응용 프로그램을 생각해보십시오. 클라이언트가 채팅 세션의 다른 참가자가 메시지를 표시하기 위해 무엇인가를 작성했는지 알아야하는 경우 서버에서이를 확인하기 위해 정기적 인 AJAX 호출을해야합니다. 반면 웹 소켓을 사용하면 서버가 클라이언트에이를 알릴 수 있으므로 네트워크 트래픽 측면에서 훨씬 효율적입니다. 또한 WebSockets 프로토콜을 사용하면 서버가 동시에 여러 구독 클라이언트에 실시간 정보를 푸시 할 수 있습니다. 예를 들어 웹 브라우저와 모바일 응용 프로그램을 WebSocket에 가입시키고 서버를 통해 직접 대화 할 수 있습니다. 이러한 종류의 시나리오를 AJAX를 사용하면 달성하기가 더 어려워지고 더 많은 stateless HTTP 호출이 필요하게됩니다.

나는이 경우 소켓

WebSocket을 프로토콜은 다른를 사용 < => 서버 상호 작용 클라이언트 동안 동일 세션 쿠키는 모든 HTTP 요청시 클라이언트와 서버 사이에 전송됩니다 이해 HTTP 프로토콜. 초기 핸드 셰이크가 발생하면 (HTTP를 통해 발생 함) 쿠키와 같은 HTTP 관련 개념은 더 이상 존재하지 않습니다.

웹 소켓을 사용할 때주의해야 할 중요한 사항 중 하나는 클라이언트와 서버간에 지속적인 연결이 필요하다는 것입니다. 이렇게하면 서버로드를 조정해야 할 때 까다로울 수 있습니다. 물론 WebSockets 프로토콜의 다른 구현은이 문제에 대한 해결책을 제공 할 수 있습니다. 예를 들어 Socket.IO has a Redis 구현을 사용하면 서버가 노드 클러스터를 통해 연결된 클라이언트를 추적 할 수 있습니다.