节点代理网络套接字如何检查
Node proxy web sockets how to check
我使用以下模块,它适用于反向代理
https://github.com/nodejitsu/node-http-proxy
目前我使用的代码如下例
httpProxy.createServer({
target: 'ws://localhost:9014',
ws: true
}).listen(8014);
我的问题是如何 check/simulate websockets 正常工作?
任何测试都会有所帮助...
最好的测试方法是创建一个客户端来连接它。
周围有很多ws模块。或者你可以使用这个:https://www.websocket.org/echo.html 只需将你的 url 放在那里并测试它。
为了响应 OP 的浏览器测试请求,我修改了我原来的解决方案,将 HTTP 和 WS 流量代理到提供 index.html
文件的服务器。然后,该文件通过 WebSocket 将浏览器连接到代理服务器,然后代理将其代理到主服务器。主服务器的浏览器文档上打印了一条简单的消息。
所以不需要 copy/paste 任何东西,我用完整的说明创建了这个 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>
我使用以下模块,它适用于反向代理 https://github.com/nodejitsu/node-http-proxy 目前我使用的代码如下例
httpProxy.createServer({
target: 'ws://localhost:9014',
ws: true
}).listen(8014);
我的问题是如何 check/simulate websockets 正常工作? 任何测试都会有所帮助...
最好的测试方法是创建一个客户端来连接它。 周围有很多ws模块。或者你可以使用这个:https://www.websocket.org/echo.html 只需将你的 url 放在那里并测试它。
为了响应 OP 的浏览器测试请求,我修改了我原来的解决方案,将 HTTP 和 WS 流量代理到提供 index.html
文件的服务器。然后,该文件通过 WebSocket 将浏览器连接到代理服务器,然后代理将其代理到主服务器。主服务器的浏览器文档上打印了一条简单的消息。
所以不需要 copy/paste 任何东西,我用完整的说明创建了这个 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>