Here's the example from before as a test case:
https://github.com/stephank/node/commit/0339fc0
I went a step further, and experimented with providing a response object
for upgrade and CONNECT requests, also queuing them properly. This is on
a branch at:
https://github.com/stephank/node/compare/upgrade-response
Notably:
- The `upgrade` and `connect` event listeners have the same signature
as regular `request` events, namely `(req, res)`.
- The response can be treated like any other, and `res.end` will treat
it as if with `Connection: close`. (Ie. `shouldKeepAlive = false`).
- To successfully upgrade, call `res.switchProtocols`, rather than
`res.end`, which takes a callback with the familiar `(sock, head)`.
Example:
var http = require('http');
var server = http.createServer();
server.on('request', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.on('upgrade', function(req, res) {
res.writeHead(101, {
'Upgrade': 'dummy',
'Connection': 'Upgrade'
});
res.switchProtocols(function(sock, head) {
/* ... */
});
});
server.listen(3000);