Как прокси-соединение через веб-сокет - PullRequest
3 голосов
/ 21 февраля 2020

У меня есть проблема, которую я задаю с помощью github.com/facebook/create-react-app: https://github.com/facebook/create-react-app/issues/8527

В основном я передаю сервер webpack-dev-server с моим собственный сервер. HTTP-запросы в порядке, но запросы Websocket завершатся с ошибкой:

WebSocket connection to 'ws://localhost:3016/sockjs-node' failed

, поскольку сервер Websocket прослушивает 3015, но не 3016.

Итак, я может через sh прокси запрос веб-сокета. Я могу прокси HTTP-запрос, например, так:

app.use((req,res,next) => {

  // proxy to dev server

  console.log('path:', req.path);
  console.log('url:', req.url);

  const r  = http.request({
    method: req.method,
    path: req.path,
    host: 'localhost',
    protocol: 'http:',
    port: 3015   // webpack-dev-server is listening on 3015
  }, r => {
    r.pipe(res);
  });

  r.once('error', next);
  req.pipe(r);

});

app.listen(3016);  // app listens on 3016 and forwards some requests to webpack-dev-server listening on 3015

Кто-нибудь знает хороший способ прокси-запроса веб-сокета?

Вот моя попытка прокси-соединения через ws: https://github.com/websockets/ws/issues/1697

1 Ответ

5 голосов
/ 08 марта 2020

Вы можете использовать очень стабильную и проверенную библиотеку http-proxy, она используется в качестве зависимости многими другими обратными прокси и балансировщиками нагрузки и тому подобным. Он поддерживает проксирование веб-сокетов. Это также очень просто в использовании. Вот минимальный пример из его хранилища

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