턴 기반 게임 서버에 대한 웹 소켓과 긴 폴링의 차이점
iOS 게임용 서버를 작성 중입니다. 게임은 턴 기반이며 서버가 정보를 클라이언트에 푸시해야하는 유일한 시간은 상대방의 움직임을 알리는 것입니다.
누구든지 웹 소켓 사용과 긴 폴링 사용의 성능 및 구현 용이성 차이에 대해 언급 할 수 있는지 궁금합니다. 또한 웹 소켓을 사용하는 경우 정보를 수신하고 다른 모든 것에 대한 POST 요청을 보내는 데만 사용해야합니까, 아니면 모든 통신이 웹 소켓을 통해 이루어져야합니까?
또한 웹 클라이언트를 만드는 데 관심이 있다면 웹 소켓과 긴 폴링 사이에 고려할 추가 사항이 있습니까?
롱 폴링이란 무엇입니까?
기존 폴링 기술의 변형이며 서버에서 클라이언트로 푸시되는 정보를 에뮬레이션 할 수 있습니다. 긴 폴링을 사용하면 클라이언트는 일반 폴링과 비슷한 방식으로 서버에서 정보를 요청합니다.
- 서버에 클라이언트에 사용할 수있는 정보가없는 경우 빈 응답을 보내는 대신 서버는 요청을 보류하고 일부 정보를 사용할 수있을 때까지 기다립니다.
정보를 사용할 수있게되면 (또는 적절한 시간 초과 후) 완전한 응답이 클라이언트로 전송됩니다. 그런 다음 클라이언트는 일반적으로 서버에서 정보를 즉시 다시 요청하므로 서버는 거의 항상 이벤트에 대한 응답으로 데이터를 전달하는 데 사용할 수있는 사용 가능한 대기 요청을 갖게됩니다.
웹 / AJAX 컨텍스트에서 긴 폴링은 Comet 프로그래밍 이라고도 합니다.
Websocket은 어떻습니까?
WebSocket은 클라이언트와 서버간에 영구적 인 연결을 제공하여 양 당사자가 언제든지 데이터 전송을 시작할 수 있습니다.
- 클라이언트는 WebSocket 핸드 셰이크라는 프로세스를 통해 WebSocket 연결을 설정합니다. 이 프로세스는 클라이언트가 서버에 일반 HTTP 요청을 보내는 것으로 시작됩니다.
- 이 요청에는 클라이언트가 WebSocket 연결을 설정하고자 함을 서버에 알리는 Upgrade 헤더가 포함되어 있습니다.
결론 :
실시간 통신이 필요한 경우 웹 소켓을 선택할 수 있습니다.
그러나 긴 폴링에서는 :
A connection is held open between the web client and the web server so that when the server has new information it can push it to the client. That request is then finished. A new request is then made between the client and the server and then wait for another update from the server. The same TCP connection is generally open persistently throughout multiple requests due to HTTP/1.1 keep-alives.
References and other considerations :
PubNub long polling vs sockets - mobile battery life
What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?
'Program Tip' 카테고리의 다른 글
AVAudioPlayer로 사운드 재생 (0) | 2020.10.26 |
---|---|
Spark에서 드라이버의 Python 버전을 어떻게 설정합니까? (0) | 2020.10.26 |
angular2에 해당하는 onchange (0) | 2020.10.26 |
RedirectToAction 메서드로 쿼리 문자열 값을 추가하는 방법은 무엇입니까? (0) | 2020.10.26 |
엔터티 키를 사용하여 GQL에서 쿼리하는 방법 (0) | 2020.10.26 |