静的ファイル、ロングポーリング (comet)、ソケット、複数の言語 (c、PHP、ノード) の Websocket を使用して、いくつかのマルチユーザー/マルチルーム アプリケーションを実行しましたが、今日では最高のエクスペリエンスは NodeJS + Socket.IO からのものです。
とても簡単です... Socket.IO は、ロングポーリングから websocket または flashsocket までを使用して、利用可能なクライアントの制限に適応するためです。それでも、ロングポーリングへの依存度が低いほど最高です。
Socket.IO サーバーを作成して構成し、部屋に出入りするための 2 つのイベント (管理したい残りのイベントに加えて)。アプリケーションの簡単な骨組みはこれです。ユーザーリスト、ユーザー名などを制御する必要がありますが、socket.id でユーザーのデータをインデックス化し、接続/切断イベントでそのハッシュを管理することは簡単にできます。「fn」はクライアント コールバック関数です。
var http = require('http')
, ioo = require('socket.io')
;
var app = http.createServer();
var io = ioo.listen(app);
// ... Place here Socket.IO configuration...
var port = 8080;
app.listen( port, function() { console.log( 'Server started' ); } );
io.sockets.on( 'connection', function( socket ) {
// Management messages
socket.on( 'connect', function( name, fn ) { connect( socket, name, fn ); });
socket.on( 'disconnect', function() { disconnect( socket.id ); });
socket.on( 'joinRoom', function( roomName, fn ) { joinRoom( socket, roomName, fn ); });
socket.on( 'leaveRoom', function( roomName, fn ) { leaveRoom( socket, roomName, fn ); });
} );
...
function joinRoom( socket, roomName, fn ) {
socket.join( roomName );
socket.broadcast.to( roomName ).emit( 'serverMessage', 'a user enters' );
socket.emit( 'message', 'You enter in room ' + roomName );
}
function leaveRoom( socket, roomName, fn ) {
socket.leave( roomName );
socket.broadcast.to( roomName ).emit( 'serverMessage', 'a user leaves' );
socket.emit( 'message', 'You leave room ' + roomName );
}
関数Socket.IO ルームの完全な説明については、Socket.IO サイトを参照してください。