node.jsでSocket.IOのステップアップテクニック

4167 ワード

前回のブログでIOではSocket.について簡単に紹介しましたIOの基本的な使い方と簡単なチャットルームDEMOを作成しました.本編は入門編を踏まえてSocket.について引き続き検討する.IOの進級用法.本編では、配置、部屋、イベントなどの面から、いくつかのSocketを紹介します.IOで実用的なAPIと注意事項.
1.構成
Socket.IOは4つの構成のAPI:ioを提供する.configure, io.set, io.enable, io.disable.そのうちio.set単項を設定io.enableとio.disableは、ブール型の構成を単一で設定するために使用されます.io.configureでは、devlopment、testなどの異なる生産環境に対して異なるパラメータを構成できます.以下にdevelopmentとreleaseの2つの環境におけるSocketを定義する.IOの異なる構成:
 
  
var io = require('socket.io').listen(80);

io.configure('development', function(){
    io.enable('browser client etag');
    io.set('log level', 1);
});

io.configure('release', function(){
    io.set('transports', ['websocket']);
});


以下、一般的な構成項目をいくつか挙げます.具体的な構成パラメータは公式WIKIを参照してください.
1).Transports(デフォルト['websocket','htmlfile','xhr-polling','jsonp-polling']):通信メソッドタイプを含む配列.Socket.IOは、websocket、pollingなど、オンラインインスタント通信を実現するさまざまな方法をサポートしています.この構成は、代替の通信方法を自分で選択することができます.2).log level(デフォルト3):ログ出力の最下位レベル、0はerror、1はwarn、2はinfo、3はdebug、デフォルトはすべてのタイプのログを出力します.3).Heartbeat interval(デフォルト25秒):ハートビートパケット送信間隔.クライアントは、通信を維持するために、この期間内にサーバにハートビートパケットを送信する必要があります.
2.部屋
部屋はSocket.IOは非常に使いやすい機能を提供しています.部屋は、指定されたクライアントの名前空間を提供することに相当し、部屋内のブロードキャストと通信は部屋以外のクライアントに影響しません.
入門編ではsocket.join('room name')はクライアントが部屋に入るために使用できます.socket.leave('room name')は部屋を出るために使用されます.クライアントが1つの部屋に入ると、次の2つの方法で部屋でメッセージをブロードキャストできます.
 
  
//1. my room , ( )
io.sockets.on('connection', function (socket) {
    // : ,
    socket.broadcast.to('my room').emit('event_name', data);
}

//2. another room ,
// : ,
io.sockets.in('another room').emit('event_name', data);

//
io.sockets.emit('event_name', data);


部屋へのメッセージの放送に加えて、以下のAPIで部屋の情報を取得することもできる.
 
  
//
//key ,value socket ID
io.sockets.manager.rooms

// particular room , socket
io.sockets.clients('particular room')

// socket.id socket
io.sockets.manager.roomClients[socket.id]


3.イベント
Socket.IOにはいくつかのデフォルトイベントが内蔵されており、イベントを設計する際にデフォルトのイベント名を避け、これらのデフォルトイベントを柔軟に運用する必要があります.
サーバ側イベント:
1).io.sockets.on('connection',function{}):socket接続が成功するとトリガーされ、socketを初期化します.on('message',function(message,callback){}):クライアントはsocket.sendがメッセージを送信するときにこのイベントがトリガーされ、messageは送信メッセージであり、callbackはメッセージを受信後に実行するコールバック2である).socket.on('anything',function(data){}):イベントを受信するとトリガー3).socket.on('disconnect',function(){}):socketが接続を失ったときにトリガーされます(ブラウザを閉じる、アクティブに切断する、オフラインするなど、接続を切断する場合が含まれます).
クライアントイベント:
1).接続:接続成功2).接続中3).disconnect:接続を切断する4).connect_failed:接続に失敗しました5).Error:エラーが発生し、他のイベントタイプでは処理できない6).Message:同サーバ側messageイベント7).anything:サーバ側anythingイベント8).reconnect_failed:再接続に失敗しました9).reconnect:再接続に成功しました10).reconnecting:再接続中
ここでは,クライアントsocketが接続を開始する順序を述べる.最初に接続すると、イベントのトリガ順序はconnecting->connectです.接続が失われると、イベントのトリガ順序は、disconnect->reconnecting->connecting->reconnect->connectです.
4.授権
1).すべてのクライアントにブロードキャスト:socket.broadcast.emit('broadcast message');
2).1つの部屋に入る(とても使いやすい!ネーミングスペースに相当し、他の部屋や部屋にいないクライアントに影響を与えることなく特定の部屋に放送することができます):socket.join('your room name');
3).一つの部屋にメッセージを放送する(送信者はメッセージを受信できない):socket.broadcast.to('your room name').emit('broadcast room message');
4).送信者を含めてメッセージを1つの部屋にブロードキャストする(このAPIはio.socketsに属する):io.sockets.in('another room name').emit('broadcast room message');
5).WebSocket通信の強制使用:(クライアント)socket.send('hi'),(サーバ)用socket.on('message',function(data){})が受信する.
Socket.IOの進級法の紹介は基本的にここまでです.個人的には日常的に使われているときにこれらの基本APIが十分だと感じていますが、これもSocket.IO極めてシンプルで使いやすいデザイン哲学.本稿ではただレンガを投げて玉を引くだけで、実際の運用で解決できない問題に遭遇した場合は、公式の詳細なWIKIを調べたほうがいいです.