2013-04-18 3 views
20

Jetty 8 서버를 실행 중입니다. (곧 websocket을 사용하게 될 것입니다). 나는 아약스 호출을 서버에 일부 데이터를 보내려면WebSocket을 현재 서버로 가리키는 방법

,이 작업을 수행 할 수 있습니다

$.ajax({ url: "ajax?a=getSomeData" }); 

을이 시나리오에서는 내가 192.168.1.100에서 내 서버에 연결하는 경우, 실제 URL을 어디 것 데이터를 가져 오려면 192.168.1.100/ajax?a=getSomeData이되지만, 192.168.1.200에서 동일한 소프트웨어를 실행하는 다른 서버에 연결하면 URL은 192.168.1.200/ajax?a=getSomeData이됩니다. 내가 WebSocket을 사용하여 동일한 일을 수행하려는 경우

, 나는 그것을 할 방법을 찾을 수 없습니다 :

var socket = new WebSocket('ws://www.example.com/'); 

작품. 하지만 상대 URL과 같이 원하는 : - 아약스 요청과 같은 - 그래서

var socket = new WebSocket('ws://sockets?a=getSomeData'); 

것을 내가 192.168.1.100에서 내 서버에 연결 한 경우 URL은 192.168.1.100/sockets?a=getSomeData 될 것입니다, 나는 192.168.1.200에 연결하는 경우, URL은 것 192.168.1.200/sockets?a=getSomeData이되어야합니다.

어떻게하면됩니까?

답변

35

그냥 URL을 직접 구축 :

var socket = new WebSocket("ws://" + location.host + "/whatever"); 

location 객체는 window 객체의 속성이며, 따라서 전 세계적으로 사용할 수 있습니다.

포트가없는 호스트 만 얻으려면 대신 location.hostname을 사용하십시오. websocket 서버가 예를 들어 다른 포트에서 수신 대기하는 경우. (http를 사용하는)

(https를 사용하는 경우) 당신은 또한 당신이 wss에 연결해야하는지 알고 location.protocol을 검사 할 수 있습니다 또는 ws.

+12

변경해야 할 경우'location.host'에서 포트 번호를 잘라내십시오. 'location.hostname'이 대신 작동합니다. – jocull

+0

안녕하세요? 내 웹 사이트에 인스턴트 메시징 기능을 추가하고 싶습니다. 내 도메인이 공유 호스팅에 있고 그들은 내 도메인에 웹 소켓을 넣을 수 없다고 말했습니다. 거기에 내 목적을 위해 연결하는 웹 소켓 URL을 자유롭게 사용할 수 있습니까 궁금 무엇입니까? 정말 웹 소켓에 새로운 그래서 여전히 작동 방법을 잘 모르겠습니다. 감사 – Sarah

관련 문제