2012-09-11 4 views
2

Java Tomcat을 websocket 서버로 사용하고 있습니다.websocket 양방향 개념은 어떻게 작동합니까?

웹 소켓과 HTTP 스트리밍의 주된 차이점은 (폴링과 긴 폴링을 언급하지 않음) websocket이 일반적인 원시 소켓 프로그래밍과 비슷한 양방향 통신을 허용한다고 생각합니다. (위의 내 이해가 잘못 될 수 있습니다, 날 고쳐 주시기 바랍니다.)

제 질문은 웹 클라이언트 (브라우저)가 이미 열려있는 웹 소켓을 통해 다른 요청을 보내는 방법입니다? 일반적인 http 요청은 새로운 소켓 연결로 다른 요청을 처리 할 것이지만 websocket은 그렇지 않습니다. 그래서 혼란 스럽습니다. 어떻게 달성합니까? 서버 측 또는 클라이언트 (브라우저) 측에서 처리해야합니까?

답변

4

예, 웹 소켓은 양방향입니다. 중요한 결과는 서버에서 클라이언트로 데이터를 효율적으로 푸시 할 수 있다는 것입니다.

기본 소켓은 열린 상태로 유지됩니다 (또는 열어 둘 수없는 경우 필요할 때 다시 열림). HTTP 1.1은 아직 did that입니다.

HTTP/1.1은 원본 HTTP (HTTP/1.0)의 개정판입니다. HTTP/1.0에서는 요청마다 동일한 서버에 대한 별도의 연결이 이루어집니다. 페이지가 전달 된 후 HTTP/1.1은 여러 번 연결을 다시 사용하여 이미지, 스크립트, 스타일 시트 등을 다운로드 할 수 있습니다. 따라서 HTTP/1.1 통신은 대기 시간이 짧다. 은 TCP 연결을 구축 할 때 상당한 오버 헤드를 나타낸다 ( ).

클라이언트 측과 서버 측 모두에서 처리해야합니다. 물론 이것은 두 소프트웨어가 모두 업데이트된다는 것을 의미합니다 (old browsers 및 이전 서버는 웹 소켓을 처리 할 수 ​​없음). (의견의 교환 다음)

편집 :

var ws = new WebSocket('ws://'+document.location.host+'/ws'); ws.onopen = function() { // do something }; ws.onerror = function() { // do something }; ws.onclose = function() { // do something }; ws.onmessage = function(msgevent) { var msg = JSON.parse(msgevent.data); // handle incoming message }; 

당신은 WS 변수를 유지하고, 그 후 클라이언트에서 밀어 수 있습니다

클라이언트 측, 여기에 연결을 초기화 할 수있는 방법

ws.send(window.JSON.stringify(msg)); // msg is a basic js object 
+0

와 동일한 연결을 사용하는 서버로 서버에서 클라이언트로 데이터를 푸시 할 수 있습니다. 클라이언트와 서버는 어떻게 연결하나요? 그것은 양방향이기 때문에, 그렇게 할 수 있어야합니까? – GMsoF

+1

물론. websocket 프로토콜이 있기 전에 표준적이고 효율적인 방법으로하기가 어려웠 기 때문에 서버에서 클라이언트로 푸시를 언급했습니다. –

+0

나도 알아 ...하지만 클라이언트가 서버에 데이터를 밀어 넣는 방법? 자바 원시 소켓 프로그래밍에서, 나는 그것을 달성하는 방법을 안다. 그러나 웹 브라우저의 경우 클라이언트 측에서 동일한 소켓을 어떻게 재사용합니까? – GMsoF

관련 문제