소켓과 웹 소켓의 차이점은 무엇입니까?


178

소켓 연결을 사용하여 다른 응용 프로그램과 통신 해야하는 웹 응용 프로그램을 작성 중입니다. 이것은 나를위한 새로운 영역이므로 소켓websockets 과 다른지 확인하고 싶습니다 . 그것들은 개념적으로 만 비슷한 것 같습니다.

처음에 Django를 프로젝트의 기초로 사용하려고 계획했지만 위의 링크에서 웹 소켓이 가능하지 않다는 것을 분명히 알았습니다. ) 선호하는 장고 설정 (mod_wsgi가있는 Apache)을 사용합니다. 그러나 필자는 서버의 호스트 이름잡는 것과 같이 간단하게 파이썬 소켓 모듈을 가져 오는 다른 게시물을 발견했습니다 .

그래서:

  • 그들은 정말로 다른가?
  • 외부 서버와의 소켓 연결 설정에 의존하는 프로젝트에 Django를 사용하지 않을 이유가 있습니까?

답변:


141

당신의 질문에 대답합니다.

  1. 그들은 비슷한 일 (일반적으로) 달성에도 불구하고, , 그들은 이다 정말 다른. WebSocket은 일반적으로 TCP / IP를 통해 실행 되는 HTTP 와 유사한 프로토콜을 통해 Application Server에 연결하는 브라우저에서 실행됩니다 . 따라서 주로 서버에 영구적으로 연결해야하는 웹 응용 프로그램을위한 것입니다. 반면에 일반 소켓은 더 강력하고 일반적입니다. TCP / IP를 통해 실행 되지만 브라우저 나 HTTP 프로토콜로 제한되지 않습니다 . 그들은 모든 종류의 커뮤니케이션을 구현하는 데 사용될 수 있습니다.
  2. 아니요. 이유가 없습니다.

128
WebSocket은 HTTP와 유사하지 않습니다. 그것들은 일부 프레임과 HTTP 호환 핸드 셰이크가있는 일반 소켓입니다. HTTP 호환 핸드 셰이크는 웹 서버가 실행중인 동일한 포트에서 웹 소켓 연결을 허용하기 때문에 (웹 서버가 전달할 수 있음) 연결이 설정되면 웹 서버가 루프에 없습니다. WebSockets는 브라우저 클라이언트에만 국한되지 않습니다. 브라우저가 아닌 클라이언트와 서버가 모두있는 libwebsocket 을 참조하십시오 .
카나 카

14
확인. 알겠습니다 ...이 허용 된 답변을 삭제할 수 없으므로 올바른 정보로 수정하도록 요청하십시오. 감사!
Pablo Santa Cruz

2
웹 소켓 클라이언트를 구축하고 브라우저 외부에서 사용할 수 있습니다. websocket 프로토콜은 "websocket"에 대한 연결이 업그레이드 된 HTTP 1.1입니다.
Roger F. Gay

2
@huggie nope. tools.ietf.org/html/rfc6455#section-5 (작은 메시지의 경우 2 바이트)의 작은 프레임이 있습니다.
카나 카

2
@NiCkNewman은 아마도 좋은 별도의 질문 일 것입니다. 프레이밍 오버 헤드가 최소화되며 문제가되지 않습니다. MMO 네트워킹을위한 WebSocket의 문제점은 두 가지입니다. 클라이언트 서버 전용이며 TCP (스트림 기반)입니다. 우수한 MMO 네트워킹 성능을 위해서는 직접 피어 투 피어 네트워킹이 필요하며 데이터 그램이 필요합니다 (일관된 낮은 대기 시간이 모든 패킷을 수신하는 것보다 중요합니다). 좋은 소식은 WebRTC DataChannel에 이러한 속성이 모두 있으므로 브라우저에서 간격을 메우고 전체 AAA MMO 게임을 허용한다는 것입니다.
카나 카

21

웹 소켓은 구현시 소켓을 사용합니다. 웹 소켓은 연결 "핸드 셰이크"및 메시지 "프레임"을 정의하는 표준 프로토콜 (현재는 최종 호출이지만 아직 최종은 아님)을 기반으로합니다. 양측은 핸드 셰이크 절차를 거쳐 상호 연결을 수락 한 다음 표준 메시지 형식 ( "프레임")을 사용하여 메시지를주고받습니다.

설치된 소프트웨어를 사용하여 컴퓨터와 컴퓨터간에 직접 통신 할 수있는 프레임 워크를 개발 중입니다. 목적에 맞을 수도 있습니다. 원하는 경우 내 블로그를 따라갈 수 있습니다 : http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html


11

당신은 WebSocket을 (또는 사용해야 할 것 몇 가지 일반적인 브라우저 응용 프로그램이 단순히 순수한 TCP 소켓을 열 수 없기 때문에 플래시 플러그인에서 지원하는 것과 유사한 프로토콜 모듈 등을).

Socket.IO모듈을 사용할 수에 대한이 node.js는 것을 많은 도움이 있지만 참고 할 수 없는 그 자체로 순수 웹 소켓 모듈.

실제로 실행할 수있는보다 일반적인 통신 모듈의 상단에 WebSocket을, 플래시 소켓을 포함한 다양한 네트워크 프로토콜.

따라서 Socket.IO서버 측에서 사용하려면 해당 클라이언트 코드와 객체도 사용해야합니다. 메시지 프로토콜을 에뮬레이션해야 WebSocket하므로 socket.io서버 에 대한 원시 연결을 쉽게 만들 수 없습니다 .


11

WebSocket은 HTTP와 마찬가지로 TCP 프로토콜을 통한 또 다른 응용 프로그램 수준 프로토콜입니다.

아래 인용 된 <Spring in Action 4> 일부 스 니펫은 WebSocket을 더 잘 이해하는 데 도움이되기를 바랍니다.

가장 간단한 형태의 WebSocket은 두 응용 프로그램 간의 통신 채널 일뿐입니다 (브라우저가 반드시 필요한 것은 아닙니다) ... WebSocket 통신은 모든 종류의 응용 프로그램 간에 사용될 수 있지만 WebSocket 의 가장 일반적인 용도는 서버 응용 프로그램 및 브라우저 기반 응용 프로그램.


2

귀하의 질문 (b)와 관련하여 Websocket 사양이 확정되지 않았습니다. 에 따르면 W3C :

구현자는이 사양이 안정적이지 않다는 것을 알고 있어야합니다.

개인적으로 나는 Websockets이 현재 사용하기에는 너무 번쩍하다고 생각합니다. 아마 1 년 정도면 유용 할 것입니다.


9 년 후인 지금은 어떻습니까?
Venryx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.