2012-11-21 2 views
0

동일한 컴퓨터 (예 : 동일한 IP)에 두 개의 서로 다른 브라우저 (Chrome 및 Safari)가 있으며 websocket을 사용하여 동일한 서버에 연결할 수 있는지 궁금하십니까?같은 시스템에있는 서로 다른 두 개의 브라우저를 websocket을 사용하여 서버에 연결할 수 있습니까?

나는 시도했다. 크롬은 잘 연결하지만, Safari는 불평 오류가 발생합니다 :

Error during WebSocket handshake: location mismatch: 
wss://www.mysite.com/sockjs/310/s1a5r_6q/websocket != ws://www.mysite.com/sockjs/310/s1a5r_6q/websocket 
sockjs-0.3.js:282Closed transport: websocket SimpleEvent(type=close, code=1006, reason=WebSocket connection broken, wasClean=false) 

을하지만 때문에 IP 주소 당 하나 개의 웹 소켓 연결의 일부 제한이 경우 확실하지 않다?

답변

4

MLister, 당신은 sockjs 배포 문제로 실행되는 것 같습니다. sockjs 서버가 https를 통해 websocket 핸드 셰이크 중에 wss : //를 반환하는지 확인하십시오. 이것은 일부 sockjs 서버에서 잘 알려진 문제입니다. 서버는 https를 통해 페이지가 제공되는 것을 항상 알 수 없으며 핸드 셰이크 중에 ws : //를 반환합니다.

예를 들어, sockjs 노드 여기에이 사건을 처리하기 위해 페이 - 웹 소켓 노드 코드이다 사용 https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L40 https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L25-L32

을 기본적으로, 당신은 당신의로드 밸런서 세트 'X-전달 - 프로토'확인해야 머리글.

의미가 있습니까?

+0

'x-forwarded-proto'부분을 이해하고 있지만 return (request.connection && request.connection.authorized! == undefined) 뒤에있는 논리는 무엇입니까? (request.socket && request.socket.secure);''x-forwarded-proto' 헤더가 설정되지 않았습니까? – MLister

+1

'x-forwarded-proto' 헤더가 설정되지 않았을 때, faye는 SSL을 통해 연결이 왔는지 알아내는 것이 가장 좋습니다. 그러나 추측 만 할 수 있습니다. 또한 SSL 종료가 node.js에 의해 내부적으로 수행 된 경우에만이를 탐지 할 수 있습니다 (haproxy, stunnel 등이 아닌) – Marek

1

적어도 브라우저가 WebSocket API를 지원하는 경우 물론 가능합니다. 두 개의 다른 브라우저가 필요하지 않습니다. 예를 들어 Chrome의 여러 탭에서 사이트를 열면 제대로 작동합니다.

2

WebSocket 프로토콜에 관한 한 기술적 인 제한은 없습니다. 그러나 스팸을 방지하기 위해 IP 주소 당 해결되지 않은 연결 시도 비율을 제한하는 사양이 있습니다. 두 명만 있으면이 문제를 겪고 있는지 의심 스럽습니다. websocket 서버가 가지고있는 다른 정책이있을 수 있습니다.

2

WSS! //www.mysite.com/sockjs/310/s1a5r_6q/websocket = WS : //www.mysite.com/sockjs/310/s1a5r_6q/websocket

이것은 웹 소켓 연결이 웹 소켓 연결을 인식하지 못하는 프록시를 통과했음을 나타냅니다. 대부분의 경우, 서버 끝의 역방향 프록시이므로 프록시 뒤의 서버에서 SSL 오버 헤드가 분산됩니다. 프록시는 클라이언트에 대한 보안 연결을 제공하지만 서버에서 클라이언트로의 연결 불안정을보고했습니다. 그건 맞지 않아.

관련 문제