2012-09-09 4 views
3

Я нахожусь в ситуации, когда я хочу, чтобы мой клиент websocket подключался к серверу, но имя сервера ip или dns неизвестно. Клиент и сервер находятся в локальной сети (подключенной к одному маршрутизатору). Я пытался что-то вроде этого ....сервер обнаружения клиентов websocket

var socket; 
for(var i=1; i<255; i++) { 
    socket = new WebSocket('ws://192.168.1.'+i+':8080/service'); 

    socket.onopen = function() { 
    console.log('WebSocket Connected!!'); 
    }; 

    socket.onclose = function (event) { 
    console.log('WebSocket Disconnected!!'); 
    socket.close(); 
    }; 

    socket.onmessage = function (event) { 
    console.log('WebSocket receive msg: ' + event.data); 
    } 
} 

Это работает, но я не уверен, если я делаю это правильно или, если есть лучший способ сделать это. Любая помощь приветствуется.

+0

Я также искал решение для этого, насколько быстро он обнаруживает ваш сервер? – Xsmael

+0

Я пытаюсь сделать то же самое, никто не нашел хорошего решения для этой ситуации? –

ответ

0

Вы пытались подключить слушателя onerror, чтобы узнать, какие ошибки выбрасываются? Возможно, вы обнаруживаете сервер, но некоторая неправильная конфигурация на сервере вызывает ошибку перед открытием соединения.

WebSockets по-прежнему является очень активно развивающимся стандартом. Есть несколько черновиков, и некоторые браузеры поддерживают некоторые черновики, но не другие. Старые проекты часто считаются небезопасными, поэтому некоторые браузеры не поддерживают их, в то время как другие браузеры поддерживают только старые черновики, потому что они не обновлены для новых. Кроме того, серверы могут находиться в одной лодке. Это дикий запад.

Я предлагаю надежно обрабатывать ошибки, а также откатываться, когда все работает неправильно. Такие пакеты, как Socket.io, предлагают такую ​​прозрачную резервную поддержку. Я предлагаю проверить это, если вы ищете быстрое решение. Однако, если вы просто используете это как учебный опыт (и я поощряю такое поведение!), Вы захотите подключить обработчик onerror, чтобы узнать, что происходит, и почему каждое соединение терпит неудачу.

+0

Ошибка при подключении к событию. Событие onerror никогда не вызывается в моем случае. – vinayr

0

Это решение, конечно же, будет ужасно масштабироваться при развертывании в сети, большей, чем класс A. И когда в сети имеется более одного сервера веб-рассылки, вы не знаете, какой из них попал.

Но до тех пор, пока в вашей сети нет DNS и нет статических IP-адресов, сканирование портов всего диапазона IP - это единственный способ найти сервер.

Вы не можете назначить статический IP-адрес серверной машине? Большинство маршрутизаторов класса потребителей не строго соблюдают использование DHCP, и обычно это не проблема, когда только некоторые машины настроены со статическими IP-адресами. Некоторые прошивки маршрутизатора также позволяют настроить DHCP-сервер, чтобы всегда назначать один и тот же IP-адрес для определенных MAC-адресов.

Смежные вопросы