2015-09-05 17 views
10

ich das folgende Modul verwenden, um zu überprüfen und es funktioniert gut für Reverse-Proxy- https://github.com/nodejitsu/node-http-proxy zur Zeit habe ich den Code wie im folgenden Beispiel verwendetKnoten Proxy-Web-Sockets wie

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

meine Frage ist, wie kann ich überprüfen/simulieren, dass die Websockets funktionieren? Jeder Test ist hilfreich ...

Antwort

6

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> 
+0

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 :)) –

+0

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

+0

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

1

Der beste Weg zum Testen ist es, einen Client zu erstellen, um eine Verbindung herzustellen. gibt es viele WS-Module herum. Oder Sie können dies verwenden: https://www.websocket.org/echo.html einfach Ihre URL dort und testen Sie es.

+0

Können Sie bitte Beispiel geben, wie kann ich Client erstellen, um es zu verbinden ? –

+0

verwenden Sie einfach die, die ich in der Verbindung zur Verfügung gestellt habe. Wenn Sie einen Client erstellen möchten, können Sie node.js verwenden und ein Modul mit dem Namen 'ws' verwenden. – DevAlien