node.js - Node 代理网络套接字如何检查

标签 node.js sockets proxy websocket node-http-proxy

我使用以下模块,它适用于反向代理 https://github.com/nodejitsu/node-http-proxy 目前我已经使用了如下示例的代码

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

我的问题是如何检查/模拟 websockets 正在工作? 任何测试都会有所帮助...

最佳答案

为了响应 OP 的浏览器测试请求,我修改了我原来的解决方案,将 HTTP 和 WS 流量代理到服务器,其中 index.html文件送达。然后,该文件通过 WebSocket 将浏览器连接到代理服务器,然后代理将代理服务器代理到主服务器。一条简单的消息从主服务器打印到浏览器文档上。

为了不需要复制/粘贴任何东西,我创建了这个 repo 并带有完整的说明: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>

关于node.js - Node 代理网络套接字如何检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32416084/

相关文章:

Java 套接字 : can you send from one thread and receive on another?

proxy - 鱿鱼 dstdom_regex 不工作

docker - 如何在公司代理后面使用 stun.l.google.com?

performance - 简单的 Node.js 服务器无法处理数百个并发请求

node.js - Amazon Elastic Beanstalk Node 和 npm 非标准安装位置

javascript - 错误: Protocol:191. 168.XXX.XXX:不支持

c - C 中的代理服务器 - 多个

android - Mongoose 时间戳和纪元转换为 Date() 的问题

c - Telnet session ,fork 与 thread

java - jvisualvm 的代理配置问题