Skip to content

Instantly share code, notes, and snippets.

@jbouzekri
Created August 14, 2014 20:12
Show Gist options
  • Save jbouzekri/217d01e087e1d8a48b47 to your computer and use it in GitHub Desktop.
Save jbouzekri/217d01e087e1d8a48b47 to your computer and use it in GitHub Desktop.

Revisions

  1. jbouzekri created this gist Aug 14, 2014.
    29 changes: 29 additions & 0 deletions proxy.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    /**
    A nodejs websocket proxy which forward a request from a websocket to a tcp server.
    */

    var io = require('socket.io').listen(8080);
    var net = require('net');

    io.sockets.on('connection', function (socket) {
    var client = new net.Socket();

    client.connect(10001, '127.0.0.1', function() {
    console.log('Connected');

    client.on('data', function(data) {
    socket.send(data.toString());
    });

    socket.on('message', function (msg) {
    console.log(msg);
    client.write(msg);
    });
    });

    client.on('close', function() {
    console.log('Connection closed');
    });

    socket.on('disconnect', function () { });
    });
    65 changes: 65 additions & 0 deletions tcpserver.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@
    <?php

    /**
    A test tcp server in PHP (listen on localhost:10001)
    */

    error_reporting(E_ALL);

    /* Allow the script to hang around waiting for connections. */
    set_time_limit(0);

    /* Turn on implicit output flushing so we see what we're getting
    * as it comes in. */
    ob_implicit_flush();

    $address = 'localhost';
    $port = 10001;

    if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
    }

    if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    }

    if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    }

    do {
    if (($msgsock = socket_accept($sock)) === false) {
    echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
    "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));

    do {
    if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
    echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
    break 2;
    }
    var_dump($buf);
    if (!$buf = trim($buf)) {
    continue;
    }
    if ($buf == 'quit') {
    break;
    }
    if ($buf == 'shutdown') {
    socket_close($msgsock);
    break 2;
    }
    $talkback = "PHP: You said '$buf'.\n";
    echo "$buf\n";
    socket_write($msgsock, $talkback, strlen($talkback));
    echo "$buf\n";
    } while (true);
    socket_close($msgsock);
    } while (true);

    socket_close($sock);
    23 changes: 23 additions & 0 deletions test.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    <!DOCTYPE html>
    <!--
    The browser test which send a request through the websocket to the tcp server.
    -->
    <html>
    <head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width" />
    <script src="../node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
    <script>
    var socket = io.connect('http://localhost:8080/');
    socket.send('hi'+"\n");

    socket.on('message', function (msg) {
    console.log(msg);
    });
    </script>
    </head>
    <body>
    <div>TODO write content</div>
    </body>
    </html>