Als Antwort auf die Anfrage des OPs für den Browser-Test habe ich meine ursprüngliche Lösung so geändert, dass sowohl HTTP- als auch WS-Verkehr auf einen Server mit einer index.html
-Datei übertragen wurde. Diese Datei verbindet dann den Browser über WebSocket mit dem Proxy-Server, den der Proxy dann an den Hauptserver weiterleitet. Eine einfache Nachricht wird vom Hauptserver auf das Browserdokument gedruckt.
Damit besteht keine Notwendigkeit/kopieren fügen etwas, ich dieses Repo mit voller Anweisung erstellt: https://github.com/caasjj/httpproxy.git
Hier ist der Code, falls andere es hier zu suchen. Um das Ganze auszuführen, erstellen Sie die zwei Serverdateien und die Datei index.html
, starten Sie die Server mit node proxyreceiver.js
und node proxyserver.js
und navigieren Sie dann zu 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>
Vielen Dank 1 +, ich habe diese 3 Dateien erstellt und starten die Knoten-App und keinen Fehler, das Problem ist, dass wenn Ich stelle im Browser die URL ein (wie in der Post 8014/9014) nichts passiert auch in der Konsole, keine Ahnung was fehlt? Brauche ich einen zusätzlichen Schritt (ich bin neu zu diesem Thema :)) –
Bitte beachten Sie, dass wir es nicht sind Rückgabe von renderndem HTML-Code an den Browser Ihre ursprüngliche Frage benötigte nur Testcode, um die Verbindung zu überprüfen, und so schrieb ich die Antwort. Konnten Sie sehen, dass der Client eine Verbindung mit dem Server herstellt, die Anforderung Proxy-Adresse erhalten und dann eine Antwort erhalten? Wenn dies der Fall ist, wird überprüft, ob die Web-Socket-Verbindung über den Proxy-Server funktioniert. Wenn Sie einen Browser-Testcode benötigen, muss ich Ihnen zusätzlichen Code zur Verfügung stellen. – caasjj
Aktualisiert mit Testcode für die Ausführung im Browser. Bitte lassen Sie mich wissen, wenn dies näher an dem ist, was Sie benötigen. – caasjj