Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node proxy web sockets how to check

I use the following module and it works fine for reverse proxy https://github.com/nodejitsu/node-http-proxy currently I've used the code like the following example

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

my question is how can I check/simulate that the websockets are working? Any test will be helpful...

like image 204
07_05_GuyT Avatar asked Sep 05 '15 17:09

07_05_GuyT


People also ask

Does node have WebSockets?

Node. js can maintain many hundreds of WebSockets connections simultaneously. WebSockets on the server can become complicated as the connection upgrade from HTTP to WebSockets requires handling. This is why developers commonly use a library to manage this for them.

Can you proxy WebSockets?

A reverse HTTP proxy over WebSocket is a type of proxy server which uses the WebSocket protocol as a "tunnel" to pass TCP communication from server to client. In Go project, gorilla/websocket is widely used to implement WebSocket. WebSocket is designed to work over HTTP.

What is WebSocket node?

What is a Web Socket? Web Socket is a protocol that provides full-duplex(multiway) communication i.e allows communication in both directions simultaneously. It is a modern web technology in which there is a continuous connection between the user's browser(client) and the server.


1 Answers

In response to the OP's request for browser test, I modified my original solution to proxy both HTTP and WS traffic to a server where an index.html file is served. This file then connects the browser to the proxy server via WebSocket, which the proxy then proxies to the main server. A simple message is printed on the browser document from the main server.

So that there is no need to copy/paste anything, I created this repo with full instruction: https://github.com/caasjj/httpproxy.git

Here is the code in case others want to look at it here. To run the whole thing, create the two server files and the index.html file, start the servers with node proxyreceiver.js and node proxyserver.js and then navigate to 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>
like image 128
caasjj Avatar answered Oct 01 '22 06:10

caasjj