Permalink
Browse files

[doc] Add examples/standalone-websocket-proxy.js

  • Loading branch information...
1 parent b608a02 commit 1ee8ae710497e239716f72d45e2f61ead3995dc3 @indexzero indexzero committed Jun 23, 2011
Showing with 104 additions and 2 deletions.
  1. +1 −1 examples/standalone-proxy.js
  2. +102 −0 examples/standalone-websocket-proxy.js
  3. +1 −1 examples/web-socket-proxy.js
@@ -1,5 +1,5 @@
/*
- standalone-proxy.js: Example of proxying over HTTP inside of a standalone HTTP server.
+ standalone-proxy.js: Example of proxying over HTTP with a standalone HTTP server.
Copyright (c) 2010 Charlie Robbins, Mikeal Rogers, Fedor Indutny, & Marak Squires.
@@ -0,0 +1,102 @@
+/*
+ standalone-websocket-proxy.js: Example of proxying websockets over HTTP with a standalone HTTP server.
+
+ Copyright (c) 2010 Charlie Robbins, Mikeal Rogers, Fedor Indutny, & Marak Squires.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+var sys = require('sys'),
+ http = require('http'),
+ colors = require('colors'),
+ websocket = require('./../vendor/websocket'),
+ httpProxy = require('./../lib/node-http-proxy');
+
+try {
+ var utils = require('socket.io/lib/socket.io/utils'),
+ io = require('socket.io');
+}
+catch (ex) {
+ console.error('Socket.io is required for this example:');
+ console.error('npm ' + 'install'.green + ' socket.io@0.6.18'.magenta);
+ process.exit(1);
+}
+
+//
+// Create the target HTTP server
+//
+var server = http.createServer(function (req, res) {
+ res.writeHead(200);
+ res.end();
+});
+
+server.listen(8080);
+
+//
+// Setup socket.io on the target HTTP server
+//
+var socket = io.listen(server);
+socket.on('connection', function (client) {
+ sys.debug('Got websocket connection');
+
+ client.on('message', function (msg) {
+ sys.debug('Got message from client: ' + msg);
+ });
+
+ socket.broadcast('from server');
+});
+
+//
+// Setup our server to proxy standard HTTP requests
+//
+var proxy = new httpProxy.HttpProxy();
+var proxyServer = http.createServer(function (req, res) {
+ proxy.proxyRequest(req, res, {
+ host: 'localhost',
+ port: 8080
+ })
+});
+
+//
+// Listen to the `upgrade` event and proxy the
+// WebSocket requests as well.
+//
+proxyServer.on('upgrade', function (req, socket, head) {
+ proxy.proxyWebSocketRequest(req, socket, head, {
+ port: 8080,
+ host: 'localhost'
+ });
+});
+
+proxyServer.listen(8081);
+
+//
+// Setup the web socket against our proxy
+//
+var ws = new websocket.WebSocket('ws://localhost:8081/socket.io/websocket/', 'borf');
+
+ws.on('open', function () {
+ ws.send(utils.encode('from client'));
+});
+
+ws.on('message', function (msg) {
+ sys.debug('Got message: ' + utils.decode(msg));
+});
@@ -36,7 +36,7 @@ try {
}
catch (ex) {
console.error('Socket.io is required for this example:');
- console.error('npm ' + 'install'.green + ' socket.io'.magenta);
+ console.error('npm ' + 'install'.green + ' socket.io@0.6.18'.magenta);
process.exit(1);
}

0 comments on commit 1ee8ae7

Please sign in to comment.