ホームページ > ウェブフロントエンド > jsチュートリアル > node.js_node.js の Socket.IO の高度な使用スキル

node.js_node.js の Socket.IO の高度な使用スキル

WBOY
リリース: 2016-05-16 16:31:58
オリジナル
1424 人が閲覧しました

前のブログ投稿 Socket.IO では、Socket.IO の基本的な使用法を簡単に紹介し、簡単なチャット ルームのデモを作成しました。この記事では、序章に基づいて、引き続き Socket.IO の高度な使用法を探求していきます。この記事では、設定、ルーム、イベントなどに始まり、Socket.IOの実践的なAPIや注意点などを紹介していきます。

1. 構成

Socket.IO は、io.configure、io.set、io.enable、io.disable の 4 つの構成 API を提供します。このうち、io.setは単一項目を設定し、io.enableとio.disableはBoolean構成で単一項目を設定するために使用されます。 io.configure を使用すると、さまざまな運用環境 (開発、テストなど) に応じてさまざまなパラメータを設定できます。以下は、開発環境とリリース環境での Socket.IO のさまざまな構成を定義します:

コードをコピーします コードは次のとおりです:

var io = require('socket.io').listen(80);

io.configure('開発', function(){
io.enable('ブラウザクライアントetag');
io.set('ログレベル', 1);
});

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

以下に、一般的に使用される設定項目をいくつか示します。特定の設定パラメータについては、公式 WIKI を参照してください。

1).transports (default ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']): 通信方式のタイプを含む配列。 Socket.IO は、WebSocket、ポーリングなど、オンラインのインスタント通信を実現するさまざまな方法をサポートしています。この構成により、代替の通信方法を選択できます。
2).ログ レベル (デフォルト 3): ログ出力の最低レベル、0 はエラー、1 は警告、2 は情報、3 はデバッグです。デフォルトでは、すべての種類のログが出力されます。
3).ハートビート間隔 (デフォルトは 25 秒): 通信を維持するには、クライアントはこの期間内にハートビート パケットをサーバーに送信する必要があります。

2. 部屋

RoomはSocket.IOが提供するとても便利な機能です。ルームは、一部の指定されたクライアントに名前空間を提供することに相当します。ルーム内のすべてのブロードキャストと通信は、ルームの外のクライアントには影響しません。

導入の章では、クライアントがルームに入るにはsocket.join('room name')を使用でき、ルームから出るにはsocket.leave('room name')を使用できることがわかりました。クライアントがルームに入ると、次の 2 つの方法でルーム内にメッセージをブロードキャストできます:

コードをコピー コードは次のとおりです:

//1. イベントを自分のルームにブロードキャストすると、送信者は除外されます (つまり、メッセージは受信されません)
io.sockets.on('接続', 関数 (ソケット) {
//注: 以下と比較して、ここではクライアントの観点からのイベント送信を示します
socket.broadcast.to('my room').emit('event_name', data);
}

///2. イベントを別のルームにブロードキャストすると、このルーム内のすべてのクライアントがメッセージを受信します
//注: 上記と比較して、サーバーの観点から見たイベント送信は次のとおりです
io.sockets.in('別の部屋').emit('イベント名', データ);

//すべてのクライアントにブロードキャストします
io.sockets.emit('イベント名', データ);

ルームにメッセージをブロードキャストするだけでなく、次の API を通じてルーム情報を取得することもできます。

コードをコピーします コードは次のとおりです:

//すべての部屋に関する情報を取得します
//key はルーム名、value はルーム名に対応するソケット 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) {}): このイベントは、クライアントがソケット.send を介してメッセージを送信するときにトリガーされます。 message は送信されたメッセージであり、callback はメッセージを受信した後に実行されるコールバックです。メッセージ
2).socket.on('anything', function(data) {}): 何らかのイベントを受信するとトリガーされます
3).socket.on('disconnect', function() {}): ソケットが接続を失ったときにトリガーされます (ブラウザを閉じる、アクティブに切断する、切断するなど、あらゆる切断状況を含みます)

クライアントイベント:

1).connect: 接続成功
2).connecting: 接続中
3).disconnect: 切断
4).connect_failed:接続に失敗しました
5).error: エラーが発生したため、他のイベント タイプでは処理できません
6).message: サーバー側のメッセージ イベント
と同じ 7).anything: サーバー側の anything イベント
と同じ 8).reconnect_failed: 再接続に失敗しました
9).reconnect: 再接続に成功しました
10).再接続: 再接続

ここで、クライアントソケットが接続を開始する順序について言及する必要があります。初めて接続するときのイベント トリガー シーケンスは次のとおりです: 接続 -> 接続; 接続が失われた場合のイベント トリガー シーケンスは: 切断 -> 再接続 (おそらく複数回) -> 接続 -> 再接続 - >接続します。

4. 承認

1) すべてのクライアントにブロードキャストします:socket.broadcast.emit('ブロードキャスト メッセージ');

2) ルームに入ります (使い方は非常に簡単です。これは名前空間に相当し、他のルームのクライアントやルーム外のクライアントに影響を与えることなく、特定のルームにブロードキャストできます)。 );

3) メッセージをルームにブロードキャストします (送信者はメッセージを受信できません):socket.broadcast.to('your room name').emit('broadcast room message');

4) ルームにメッセージをブロードキャストします (送信者がメッセージを受信できることを含みます) (この API は io.sockets に属します): io.sockets.in('別のルーム名').emit('ブロードキャスト ルーム メッセージ' );

5) WebSocket 通信の使用を強制します: (クライアント)socket.send('hi')、(サーバー)socket.on('message', function(data){}) を使用して受信します。

Socket.IO の高度な使い方の紹介は基本的にここで終わります。個人的には、これらの基本的な API は日常的に使用するのに十分であると感じています。これは、Socket.IO の非常にシンプルで使いやすい設計思想も反映しています。この記事はあくまで紹介です。実際のアプリケーションで解決できない問題が発生した場合は、公式の詳細な WIKI を確認するとよいでしょう。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート