Подтвердить что ты не робот

Как указать WebSocket на текущий сервер

У меня работает сервер Jetty 8 (надеюсь, скоро с веб-сайтами).

Если я хочу отправить некоторые данные на сервер с помощью ajax-вызова, я могу сделать это:

$.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.

Но если я хочу сделать то же самое с помощью WebSockets, я не могу найти, как это сделать:

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

Работает. Но я хочу что-то вроде относительного URL:

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

Так что, как и запрос ajax, если я подключался к моему серверу в 192.168.1.100, url будет 192.168.1.100/sockets?a=getSomeData, и если я подключусь к 192.168.1.200, то URL будет 192.168.1.200/sockets?a=getSomeData.

Как я могу это сделать?

4b9b3361

Ответ 1

Просто создайте URL-адрес самостоятельно:

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

Объект location является свойством объекта window и, следовательно, доступен по всему миру.

Чтобы получить только хост без порта, используйте location.hostname. Если сервер websocket прослушивает другой порт, например.

Вы также можете проверить location.protocol, чтобы узнать, следует ли подключиться к wss (когда используется https) или ws (если используется http).