2014-02-03 2 views
2

Я использую прокси-сервер NginX для передачи данных через WebSocket между веб-приложением и приложением Node.js.Как проверить с помощью JavaScript, если порт веб-сервера заблокирован

При этом все запросы, чтобы открыть веб-страницу и PHP функция будут маршрутизировать через порт 80, и все данные приходят и уходят через WebSocket бы направить на порт 8080 или 8008.

Проблемы: порт 8080 был заблокирован в мобильной сети, поэтому люди не могут использовать мобильный телефон (Android) для запуска веб-приложения, а порт 8008 был заблокирован в некоторых офисах и домах, поэтому пользователь не может использовать ПК для подключения и приема данных через приложение.

Я могу установить прокси-сервер NginX для получения этих данных отдельно, но как я могу проверить, какой порт блокируется в это время. Я попробовал этот обходной путь, но он не работает:

var socket = new WebSocket('ws://62.57.141.143:8008/') || new WebSocket('ws:// 62.57.141.143:8080/'); 

Я хочу что-то вроде этого:

var socket; 
if (port 8080 is blocked) { 
    socket = new WebSocket('ws://62.57.141.143:8008/') 
} else { 
    socket = new WebSocket('ws://62.57.141.143:8080/') 
} 

Спасибо и надеюсь, что Я ясно

ответ

1

Наконец, я могу найти решение.

function openWebsocket(url){ 
    try { 
     socket = new WebSocket(url); 
     socket.onopen = function(){ 
      console.log('Socket is now open.'); 
     }; 
     socket.onerror = function (error) { 
      console.error('There was an un-identified Web Socket error'); 
     }; 
     socket.onmessage = function (message) { 
      console.info("Message: %o", message.data); 
     }; 
    } catch (e) { 
     console.error('Sorry, the web socket at "%s" is un-available', url); 
    } 
} 

openWebsocket("ws://62.57.141.143:8008"); 
openWebsocket("ws://62.57.141.143:8080"); 
0

Попробуйте подключиться к нему , Если вы получите сообщение об ошибке, вернитесь в другой порт.

0

Если вы уже используете Nginx, воспользоваться proxy_pass:

Пользователи по-прежнему подключаться к порту 80, а Nginx прокси это порт 8080.

Пример: Proxy передать все под /socket.io/ к http://127.0.0.1:8080 ,

location /socket.io/ { 
    proxy_pass http://127.0.0.1:8080; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header Host $host; 
} 

Для стороне клиента, попробуйте следующее:

Если клиент может подключиться, переменная networkPort80xx ​​будет установлена ​​истина.

В вашем веб-приложения:

<script src="//62.57.141.143:8080/detect.js"></script> 
<script src="//62.57.141.143:8008/detect.js"></script> 
<script> 
var networkPort8080 = false, 
    networkPort8008 = false; 
if (window.NetworkPort8080) { networkPort8080=true; } 
if (window.NetworkPort8008) { networkPort8008=true; } 
var socket; 
if (networkPort8080) { 
    socket = new WebSocket('ws://62.57.141.143:8080/'); 
} else if (networkPort8008) { 
    socket = new WebSocket('ws://62.57.141.143:8008/'); 
} 
</script> 

В 62.57.141.143:8080/detect.js

window.NetworkPort8080=function(){return true;} 

В 62.57.141.143:8008/detect.js

window.NetworkPort8000=function(){return true;} 
+0

Спасибо, я уже сделал это. Мне просто нужно проверить клиентскую сторону. – ket

+0

Я не знаю, почему вам нужно использовать 8080/8008, потому что WS: // может подключаться через 80 через proxy_pass. В любом случае, попробуйте код на стороне клиента. –

+0

Поскольку этот порт уже занят PHP – ket

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