2011-03-19 4 views
6

Django와 함께 node.js 및 socket.io와 함께 WebSockets를 사용하는 응용 프로그램을 작성하고 Redis를 통해 데이터를 공유하게됩니다 (해당 문장의 많은 전문 용어!).WebSocket (또는 AJAX long-polling 등)을 원래 HTTP 요청과 다른 포트에서 실행할 수 있습니까?

내가 다른 포트에 노드를 실행하는 경우 (예를 들어, 5555), 나는 (등 긴 폴링처럼, socket.io 또는 대체 방법)을 웹 소켓으로 연결 할 수 있습니다 또는 same origin policy 저를 줄 것이다 문제가 있습니까?

그렇다면 어떻게해야합니까?

답변

5

Socket.io는 모든 브라우저에서 지원되지 않는 CORS은 제외하고 크로스 도메인 긴 폴링에 일반적으로 사용되는 JSONP 폴링을 지원합니다. | 초 - 웹 소켓 - 위치 | 서버는 에서 호스트 이름을 포함

다음 specification 상태 - 도메인 간 주제 WebSocket을에 대하여 필드 의 핸드 쉐이크가 있으므로 클라이언트와 서버가 을 확인하면 어떤 호스트가 에 사용되는지 확인할 수 있습니다.

다른 포트로 WebSocket을 사용할 수 있어야합니다. 실제로 80과 같은 표준 포트가 Django 기반 응용 프로그램을 제공하기 위해 다른 웹 서버에서 사용되므로 다른 선택이 없을 것입니다. 또한 동일한 도메인 및 포트를 사용하는 경우 브라우저 특정 parallel connection limits과 관련된 잠재적 인 문제가있을 수 있습니다 (예 : 동일한 브라우저 컨텍스트 내에서 둘 이상의 탭을 열려고 할 때 Facebook 채팅에서 볼 수 있음 - 각 탭이 다른 하위 도메인에 연결됨 이러한 한계를 극복하기 위해 긴 폴링 동안).

1

WebSocket에 대해서는 잘 모르겠지만 Ajax가 문제를 일으킬 수 있습니다. 나는 그것이 서버 측 리버스 프록시를 사용하여 해결 될 수 있다고 생각한다.

+0

주위를 둘러 보는 방법에 대한 아이디어가 있으십니까? – Ankit

+0

@Ankit 무엇을 얻으세요? –

+0

다른 포트에서 AJAX 호출을하거나 특정 요청을 올바른 서버로 라우트 할 수 있도록 설정하십시오. – Ankit

2

socket.io은 도메인 간 연결을 지원합니다 (FAQ 참조). 다른 포트가 정상적으로 작동합니다.

3

대답은 "때로는"입니다. 브라우저와 보안 정책이 매우 다양합니다.

당신이 Socket.IO를 사용하고 있다고 가정하면 ... 나는 SOP (동일 출처 정책) 규칙을 무시할 수없는 Opera를 제외하고는 아무런 문제가 없었습니다. 이 수정으로 WebSocket을 사용할 수있게되었습니다.

관련 문제