2013-04-18 22 views
20

Ho un server Jetty 8 in esecuzione (si spera presto con websockets).Come puntare un WebSocket al server corrente

Se voglio inviare alcuni dati al server con una chiamata AJAX, posso fare questo:

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

In questo scenario, se mi collego al mio server al 192.168.1.100, l'URL reale dove vuole ottenere i dati da, sarà 192.168.1.100/ajax?a=getSomeData, ma se mi collego a un altro server che esegue lo stesso software a 192.168.1.200, l'URL sarà 192.168.1.200/ajax?a=getSomeData.

Ma se voglio ottenere lo stesso risultato utilizzando WebSockets, non riesco a trovare il modo di farlo:

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

Works. Ma io voglio qualcosa di simile a un URL relativo:

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

In modo che - come la richiesta AJAX - se fossi la connessione al server presso 192.168.1.100, l'url sarà 192.168.1.100/sockets?a=getSomeData, e se mi collego al 192.168.1.200, l'URL essere 192.168.1.200/sockets?a=getSomeData.

Come posso realizzare questo?

risposta

35

Basta costruire l'URL da soli:

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

L'oggetto location è una proprietà dell'oggetto window, ed è quindi disponibile a livello globale.

Per ottenere solo l'host senza la porta, utilizzare invece location.hostname. Ad esempio, se il server WebSocket è in ascolto su un'altra porta.

È inoltre possibile controllare location.protocol sapere se si deve collegare a wss (quando si utilizza https) o ws (quando http è utilizzato).

+12

Assicurarsi di tagliare il numero di porta di 'location.host' se è necessario cambiarlo! 'location.hostname' funzionerà invece. – jocull

+0

ciao puoi aiutare? Vorrei aggiungere una funzione di instant messaging sul mio sito web. il mio dominio è su hosting condiviso e mi hanno detto che non è possibile * inserire un websocket nel mio dominio. Mi chiedo se siano disponibili URL di socket web disponibili gratuitamente per i miei scopi? Sono davvero nuovo per le prese sul web, quindi sono ancora incerto su come funziona. Grazie – Sarah

Problemi correlati