Skip to content

Instantly share code, notes, and snippets.

@Jxck
Created February 27, 2012 15:39
Show Gist options
  • Select an option

  • Save Jxck/1924757 to your computer and use it in GitHub Desktop.

Select an option

Save Jxck/1924757 to your computer and use it in GitHub Desktop.
Test WebSocket/Socket.IO over ELB
node_modules
var http = require('http')
, httpProxy = require('http-proxy')
;
var addresses = [
{ host: 'localhost', port: 3000 }
, { host: 'localhost', port: 3001 }
, { host: 'localhost', port: 3002 }
];
function getTarget(index) {
index = index || Math.floor(Math.random() * 3);
var target = addresses[index];
return { host: target.host, port: target.port };
}
var server = http.createServer(function(req, res) {
// var proxy = new httpProxy.HttpProxy({ target: getTarget() });
var proxy = new httpProxy.HttpProxy({ target: addresses[0] });
proxy.proxyRequest(req, res);
});
server.on('upgrade', function(req, socket, head) {
// var proxy = new httpProxy.HttpProxy({ target: getTarget() });
var proxy = new httpProxy.HttpProxy({ target: addresses[1] });
proxy.proxyWebSocketRequest(req, socket, head);
});
server.listen(4000);
{
"name": "application-name"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"express": "2.5.8"
, "ejs": ">= 0.0.1"
, "socket.io": "0.9.1-1"
, "ws": "0.4.7"
, "redis": "0.7.1"
, "http-proxy": "0.8.0"
}
}
// Client
var socket = io.connect();
function dispay(message) {
document.getElementById('console').innerText += message + '\n';
};
socket.on('connect', function() {
dispay('connect via ' + socket.socket.transport.name);
socket.emit('msg send', 'hello');
socket.on('msg push', function (message) {
dispay(message);
});
socket.on('disconnect', function(){
dispay('disconnect');
});
});
var express = require('express')
, io = require('socket.io')
, redis = require('redis')
, port = process.argv[2] || 3000
;
var app = module.exports = express.createServer()
, SocketRedisStore = io.RedisStore
, io = io.listen(app)
;
app.configure(function() {
app.use(express.cookieParser());
app.use(express.session({ secret: 'elb websocket test' }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
io.configure(function() {
io.set('store', new SocketRedisStore());
});
io.sockets.on('connection', function(socket) {
console.log('connect via', socket.transport);
socket.on('msg send', function(msg) {
socket.emit('msg push', msg + ' from ' + process.pid);
});
});
app.listen(port);
console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env);
<html>
<head>
<title>Socket.IO Sample</title>
</head>
<body>
<div id="console"></div>
<script type="text/javascript" src="socket.io/socket.io.js"></script>
<script type="text/javascript" src="sio-client.js"></script>
</body>
</html>
var express = require('express')
, io = require('socket.io')
;
var app = module.exports = express.createServer()
, io = io.listen(app);
app.configure(function() {
app.use(express.cookieParser());
app.use(express.session({ secret: 'elb websocket test' }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
// io.configure(function() {
// io.set('transports', ['xhr-polling']);
// });
io.sockets.on('connection', function(socket) {
console.log('connect via', socket.transport);
socket.on('msg send', function(msg) {
socket.emit('msg push', msg + ' from ' + process.pid);
});
});
app.listen(3000);
console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env);
// Client
var ws = new WebSocket('ws://localhost:4000');
function dispay(message) {
document.getElementById('console').innerText += message + '\n';
};
ws.onopen = function() {
dispay('connect via ' + 'websocket(ws)');
ws.send('hello');
ws.onmessage = function(ev) {
dispay(ev.data);
};
ws.onclose = function() {
dispay('disconnect');
};
};
<html>
<head>
<title>WS Sample</title>
</head>
<body>
<div id="console"></div>
<script type="text/javascript" src="ws-client.js"></script>
</body>
</html>
var express = require('express')
, WebSocketServer = require('ws').Server
, wss = new WebSocketServer({ port: 4000 });
;
var app = module.exports = express.createServer();
app.configure(function() {
app.use(express.cookieParser());
app.use(express.session({ secret: 'your secret here' }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
wss.on('connection', function(ws) {
console.log('connected');
ws.on('message', function(msg) {
ws.send(msg + ' from ' + process.pid);
});
});
app.listen(3000);
console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env);
@artoon1
Copy link
Copy Markdown

artoon1 commented Feb 6, 2014

Thanks for your tutorial.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment