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.
Test proxy request from a browser to a tcp server accross node js. Browser -> websocket -> tcp server. Its working
/**
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 () { });
});
<?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);
<!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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment