私は午後中ずっと node.js と socket.io の例をじっと見ていて、サーバーに接続したユーザーの数を示す簡単なページをまとめようとしています。
http://socket.io/のドキュメントと、私がやろうとしていることを正確に概説するいくつかのチュートリアル/質問を読みました。シンプルなノードjsサーバーとクライアントを作成しても役に立たないこともわかりました。
バージョン情報:
node.js - 0.6.15
express - 3.0.0alpha1
socket.io - 0.9.5 (socket.io-client は同じバージョンですが、リソースが見つかりません... コメントを参照してください)
ejs - 0.7.1
ここに私のサーバーコードがあります:
var express = require('express'),
config = {
port: 4000,
hostname: 'localhost'
};
var server = module.exports = express.createServer();
/* server configuration */
server.use(express.cookieParser('keyboard unicorn'));
server.use(express.bodyParser());
server.use(express.methodOverride());
server.use(express.session({ secret: 'keyboard unicorn' }));
server.engine('.html', require('ejs').__express);
server.set('views', __dirname + '/lib/views');
server.set('view options', { layout: false });
server.set('view engine', 'html');
server.use(server.router);
server.use('/', express.static(__dirname + '/lib/assets'));
var io = require('socket.io').listen(server);
var connections = { 'length': 0 };
io.sockets.on('connection', function(socket) {
socket.__fd = socket.fd;
connections[socket.__fd]=socket.remoteAddress;
++connections.length;
console.log('user connected! There are a total of ' + connections.length + ' users online.');
return socket.on('disconnect',function(){
delete conns[socket.__fd];
--connections.length;
console.log('user disconnected! There are a total of ' + connections.length + ' users remaining online.');
});
});
server.get('/', function( req, res ) {
res.render('index', {
'page_title': 'sample application',
'number_of_connections': connections.length
});
});
server.listen(config.port, config.hostname);
ここに私のクライアントコードがあります:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><%= page_title %></title>
</head>
<body>
<div>There is a total of <%= number_of_connections %> user(s) connected.</div>
<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<script type="text/javascript">
var socket = new io.Socket('localhost',{'port':4000});
socket.connect();
socket.on('connect', function() {
console.log('connected');
});
</script>
</body>
</html>
サーバーを実行してクライアントに接続すると、次のようになります。
$ node server.js
info - socket.io started
次に、Web ブラウザーで localhost:4000 に移動すると、「0」(number_of_connections) のページが表示されます。また、サーバーのターミナルには何も表示されません (on.('connection' はヒットしません)。
クライアントでは、1 ~ 2 秒後に膨大な数のエラーが発生し始めます (コンソールを数秒間開いたままにしておくと、ページがクラッシュします) 下の画像を参照してください。
これをデバッグするためにどこから始めるべきかについての助けをいただければ幸いです! nodejs と socket.io を使って遊んだり、理解したりできるように、この基本的な例を起動して実行したいだけです。