Created
August 14, 2014 20:12
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
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 () { }); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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