Веб-сокеты прокси узла, как проверить

Я использую следующий модуль, и он отлично работает для обратного прокси-сервера https://github.com/nodejitsu/node-http-proxy в настоящее время я использовал код, подобный следующему примеру

httpProxy.createServer({
  target: 'ws://localhost:9014',
  ws: true
}).listen(8014);

мой вопрос: как я могу проверить/симулировать, что веб-сокеты работают? Любой тест будет полезен...


person 07_05_GuyT    schedule 05.09.2015    source источник


Ответы (2)


В ответ на запрос OP о тестировании браузера я изменил свое исходное решение, чтобы проксировать трафик HTTP и WS на сервер, на котором обслуживается файл index.html. Затем этот файл подключает браузер к прокси-серверу через WebSocket, который прокси затем проксирует на основной сервер. Простое сообщение печатается в документе браузера с главного сервера.

Чтобы не нужно было ничего копировать/вставлять, я создал этот репозиторий с полной инструкцией: https://github.com/caasjj/httpproxy.git

Вот код на случай, если другие захотят посмотреть его здесь. Чтобы запустить все это, создайте два файла сервера и файл index.html, запустите серверы с node proxyreceiver.js и node proxyserver.js, а затем перейдите к localhost:8014/index.html.

(proxyserver.js):

var httpProxy = require('http-proxy');
var http = require('http');

var proxy = new httpProxy.createProxyServer({
  target: {
    host: 'localhost',
    port: 9014
  }
});
var proxyServer = http.createServer(function (req, res) {
  proxy.web(req, res);
});

//
// Listen to the `upgrade` event and proxy the
// WebSocket requests as well.
//
proxyServer.on('upgrade', function (req, socket, head) {
  proxy.ws(req, socket, head);
});

proxyServer.listen(8014);

(proxyreceiver.js):

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(9014);

function handler (req, res) {
    res.writeHead(200);
    fs.readFile('index.html', function(err, data){
      res.end(data);
    })

}

io.on('connection', function (socket) {

  socket.emit('data', { message: 'Hello World!' });

  socket.on('resp', function(msg) {
    console.log('Got message: ', msg);
  });

});

(index.html):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Web Socket Proxy Test</title>
  <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
  <script>
    var socket = io('http://localhost:8014');
    var p = document.createElement("p")
    socket.on('data', function (data) {
       console.log('Got', data);
       p.innerHTML = "Received:" + data.message;
       document.body.appendChild(p);
    });
</script>
</head>
<body>
  <h1>Test ProxyServer</h1>
</body>
</html>
person caasjj    schedule 10.09.2015
comment
Большое спасибо 1+, я создал эти 3 файла и запустил приложение node и не получил никакой ошибки, проблема в том, что когда я ввожу в браузер URL-адрес (как в сообщении 8014/9014), ничего не происходит даже в консоли , есть идеи, чего не хватает? Нужен ли мне дополнительный шаг (я новичок в этой теме :)) - person 07_05_GuyT; 11.09.2015
comment
Обратите внимание, что мы не возвращаем в браузер какой-либо HTML-код, который можно отобразить. На ваш исходный вопрос просто требовался тестовый код для проверки соединения, и именно так я написал ответ. Удалось ли вам увидеть, как клиент подключается к серверу, проксирует запрос и затем получает ответ? Если это так, это подтверждает, что подключение к веб-сокету работает через прокси-сервер. Если вам нужен тестовый код браузера, мне нужно будет предоставить вам дополнительный код. - person caasjj; 11.09.2015
comment
Обновлен тестовым кодом для запуска в браузере. Пожалуйста, дайте мне знать, если это ближе к тому, что вам нужно. - person caasjj; 11.09.2015
comment
Большое спасибо, я клонирую его из git и запускаю два файла, когда я запускаю индексный файл, я получаю тестовый ProxyServer, но как я тестирую веб-сокет, когда я ввожу URL-адрес localhost:8014/index.html, отмечая, что это происходит в консоли Я вижу Не удалось загрузить ресурс: localhost:8014/index.html net::ERR_CONNECTION_REFUSED есть идеи? - person 07_05_GuyT; 14.09.2015
comment
Второй вопрос: предположим, что в моем сценарии мне не нужен второй сервер (этот сервер создан другой программой, и мне нужно просто прокси-сервер для его вызовов и ответ на вопрос, как мне принять код, чем, заранее спасибо, эксперт! - person 07_05_GuyT; 14.09.2015
comment
Ошибка в том, что прокси не может подключиться к основному серверу WS. Пожалуйста, убедитесь, что у вас точно такие же порты, как у меня, оба сервера находятся на одной машине, без брандмауэров и т. д. Что касается вашего второго вопроса, это зависит от конфигурации (номер порта) вашего основного сервера, но вы не должны нужно многое изменить. - person caasjj; 14.09.2015

Лучший способ проверить это создать клиент для подключения к нему. вокруг много модулей ws. Или вы можете использовать это: https://www.websocket.org/echo.html просто поместите ваш URL там и проверить его.

person DevAlien    schedule 09.09.2015
comment
Не могли бы вы привести пример, как я могу создать клиент для подключения к нему? - person 07_05_GuyT; 10.09.2015
comment
просто используйте тот, который я предоставил в ссылке. Если вы хотите создать клиент, вы можете использовать node.js и использовать модуль с именем ws - person DevAlien; 10.09.2015