以前のブログ投稿であるsocket.ioで、socket.ioの基本的な使用法を簡単に紹介し、シンプルなチャットルームのデモを作成しました。紹介の章に基づいて、この記事では、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を使用すると、さまざまな生産環境(開発、テストなど)に異なるパラメーターを構成できます。以下は、2つの環境でsocket.ioのさまざまな構成を定義しています。
コードコピーは次のとおりです。
var io = require( 'socket.io')。聞き(80);
io.configure( 'development'、function(){
io.enable( 'ブラウザークライアント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レベル(デフォルト3):ログ出力の最低レベル、0はエラー、1は警告、2は情報、3はデバッグ、すべてのタイプのログはデフォルトで出力されます。
3).heartBeatインターバル(デフォルト25秒):ハートビートパケットの送信インターバルでは、クライアントはこの期間内にハートビートパケットをサーバーに送信して通信を維持する必要があります。
2。部屋
部屋は、socket.ioが提供する非常に便利な機能です。部屋は、指定されたクライアントの一部に名前空間を提供することに相当し、部屋のすべての放送と通信は部屋の外のクライアントに影響しません。
はじめにでは、socket.join( 'ルーム名')を使用してクライアントごとに部屋に入ることができ、socket.leave( 'ルーム名')が部屋を出るために使用できます。クライアントが部屋に入ると、メッセージは2つの方法で部屋にブロードキャストできます。
コードコピーは次のとおりです。
// 1。私の部屋にイベントを放送すると、提出者は除外されます(つまり、メッセージは受信されません)
io.sockets.on( 'connection'、function(socket){
//注:以下と比較して、クライアントの観点からイベントを送信するためにここにあります
socket.broadcast.to( 'my room')。emit( 'event_name'、data);
}
// 2。別の部屋にイベントを放送すると、この部屋のすべてのクライアントがメッセージを受け取ります
//注:上記と比較して、サーバーの観点からイベントを送信することを以下に示します
io.sockets.in( 'Another Room')。emit( 'event_name'、data);
//すべてのクライアントにブロードキャストします
io.sockets.emit( 'event_name'、data);
部屋へのメッセージをブロードキャストすることに加えて、次のAPIから部屋情報を取得することもできます。
コードコピーは次のとおりです。
//すべての部屋に関する情報を取得します
//キーは部屋名、値は部屋名に対応するソケットIDアレイです
io.sockets.manager.rooms
//特定の部屋でクライアントを取得し、この部屋のすべてのソケットインスタンスを返します
io.sockets.clients(「特定の部屋」)
// socket.idを介してこのソケットで入力された部屋情報を取得します
io.sockets.manager.roomclients [socket.id]
3。イベント
Socket.ioには、いくつかの組み込みのデフォルトイベントがあります。イベントを設計するときは、デフォルトのイベント名を回避し、これらのデフォルトイベントを柔軟に使用する必要があります。
サーバー側のイベント:
1).io.sockets.on( 'connection'、function(socket){}):ソケット接続が成功した後にトリガーされ、初期化に使用されます
socket.on( 'message'、function(message、callback){}):このイベントは、クライアントがsocket.sendを介してメッセージを送信するとトリガーされます。メッセージは送信されたメッセージです。コールバックは、メッセージを受信した後に実行されるコールバックです。
2).socket.on( 'Anything'、function(data){}):任意のイベントが受信されたときに発射されます
3).socket.on( 'disconnect'、function(){}):ソケットが接続を失ったときにトリガー(ブラウザの閉鎖、積極的に切断、切断などの切断状況を含む)
クライアントイベント:
1).Connect:接続が成功しました
2)。接続:接続
3).disconnect:切断
4).Connect_Failed:接続に失敗しました
5)。エラー:エラーが発生し、他のイベントタイプでは処理できません。
6).Message:同じサーバー側のメッセージイベント
7)
8).Reconnect_Failed:再接続に失敗しました
9)。Reconnect:正常に再接続します
10)。再接続:再接続
ここでは、クライアントソケットが接続を開始するときに注文に言及する必要があります。最初の接続が接続されている場合、イベントのトリガー順序は次のとおりです。接続が失われると、イベントのトリガー順序は次のとおりです。
4。認可
1)。すべてのクライアントにブロードキャスト:socket.broadcast.emit( 'broadcast message');
2)。部屋に入る(非常に使いやすい!それは名前空間に相当し、他の部屋のクライアントに影響を与えることなく特定の部屋にブロードキャストできるか、部屋のクライアントではない):socket.join( 'your room name');
3)。部屋へのブロードキャストメッセージ(送信者はメッセージを受信できません):socket.broadcast.to( 'your room name')。エミット( 'ブロードキャストルームメッセージ');
4)。部屋にメッセージをブロードキャストする(送信者を含むメッセージを含む)(このAPIはio.socketsに属します):io.sockets.in( 'Another Room Name')。Emit( 'Broadcast Roomメッセージ');
5)。 Force WebSocket通信:(クライアント)Socket.Send( 'Hi')、(server)socket.on( 'message'、function(data){})を使用して受信します。
これは基本的に、socket.ioの高度な使用法の紹介です。私は個人的に、これらの基本的なAPIは毎日の使用に十分であると感じています。これは、socket.ioの非常にシンプルで使いやすいデザイン哲学も反映しています。この記事は、注意を引く方法にすぎません。実際に使用できない問題に遭遇した場合、公式の詳細なWikiを確認する方が良いでしょう。