1。はじめに
まず第一に、socket.ioの公式ウェブサイト:http://socket.io
公式ウェブサイトは非常に簡潔であり、APIドキュメントはなく、参照する簡単な「使用方法」だけです。 Socket.ioは公式Webサイトと同じくらい簡単で使いやすいからです。
では、socket.ioとは何ですか? Socket.ioは、クライアント側のJSとサーバー側のnodejsを含むWebsocketライブラリです。その目標は、さまざまなブラウザやモバイルデバイスで使用できるリアルタイムアプリケーションを構築することです。 Websocket、Ajax Long Polling、Iframeストリーミングなど、非常に便利でユーザーフレンドリーなさまざまな方法のブラウザに基づいて、リアルタイムネットワークアプリケーションを実現する最良の方法を自動的に選択します。サポートされているブラウザはIE5.5と同じくらい低く、ほとんどのニーズを満たすはずです。
2。インストールと展開
2.1インストール
まず第一に、インストールは非常に簡単です。Node.js環境では、1つの文だけです。
コードコピーは次のとおりです。
NPMインストールsocket.io
2.2 Expressを組み合わせてサーバーを構築します
Expressは小さなnode.js Webアプリケーションフレームワークであり、HTTPサーバーを構築するときによく使用されるため、Socket.ioで直接説明され、例としてExpressが直接説明されます。
コードコピーは次のとおりです。
var Express = require( 'Express')
、app = express()
、server = require( 'http')。createServer(app)
、io = require( 'socket.io')。聞き(サーバー);
server.listen(3001);
Expressを使用していない場合は、socket.io/#how-useを参照してください
3。基本的な使用方法
主に2つのコードに分かれています:サーバー側とクライアント側の側面。どちらも非常にシンプルです。
サーバー(app.js):
コードコピーは次のとおりです。
//上記のコードを接続します
app.get( '/'、function(req、res){
res.sendfile(__ dirname + '/index.html');});
io.sockets.on( 'connection'、function(socket){
socket.emit( 'news'、{hello: 'world'});
socket.on( 'other event'、function(data){
console.log(data);
});
});
最初に、IO.Sockets.の関数は、クライアントが接続を開始するイベントとして文字列「接続」を受け入れます。接続が成功すると、ソケットパラメーターを使用したコールバック関数が呼び出されます。 socket.ioを使用する場合、基本的にこのコールバック関数のユーザーリクエストを処理します。
ソケットの最も重要なことは、排出されています。前者はイベントを提出します(問題)イベント名は文字列で表されます)。イベント名はカスタマイズでき、いくつかのデフォルトのイベント名があり、その後にオブジェクトが続き、ソケットに送信されたコンテンツを示します。後者はイベント(イベント名は文字列で表されます)を受け取り、その後、データが受信されたデータであるイベントコールを受信するコールバック関数が続きます。
上記の例では、ニュースイベントを送信して他のイベントイベントを受け取ったため、クライアントは対応する受信および送信イベントが必要です。はい、クライアントコードは正反対であり、サーバーと非常に似ています。
クライアント(client.js)
コードコピーは次のとおりです。
<スクリプトsrc = "/socket.io/socket.io.js"> </script>
<スクリプト>
var socket = io.connect( 'http:// localhost');
socket.on( 'news'、function(data){
console.log(data);
socket.emit( 'other event'、{my: 'data'});
});
</script>
注意すべきことは2つあります。Socket.io.jsパスを正しく記述する必要があります。このJSファイルは、実際にはサーバー側のnode_modulesフォルダーに配置されています。このファイルを要求するときにリダイレクトされます。したがって、このファイルがサーバー側に存在しないのではなく、なぜそれが正常に機能するのか驚かないでください。もちろん、サーバーサイドのsocket.io.jsファイルをローカルにコピーしてクライアント側のJSファイルにすることができるため、毎回ノードサーバーからこのJSファイルをリクエストする必要はありません。これにより、安定性が向上します。 2番目のポイントは、var socket = io.connect( 'WebサイトアドレスまたはIP')を使用することです。ソケットオブジェクトを取得するには、ソケットを使用してイベントを送信および受信できます。イベント処理に関して、上記のコードは、「ニュース」イベントを受信した後、受信したデータが印刷され、「その他のイベント」イベントがサーバーに送信されることを意味します。
注:「切断」などの組み込みのデフォルトイベント名は、クライアント接続が切断されることを意味します。メッセージ「メッセージ」は、カスタムイベント名の場合、socket.ioに組み込まれたデフォルトのイベント名で名前を2倍にしないようにします。
4。その他の一般的なAPI
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){})を使用して受信します。
5. socket.ioを使用してチャットルームを構築します
最後に、簡単な例でこの記事を終了します。 Socket.ioを使用してチャットルームを構築することは約50行のコードであり、リアルタイムのチャット効果も非常に優れています。次のキーコードが投稿されています。
サーバー(socketchat.js)
コードコピーは次のとおりです。
//クライアント接続用の辞書、クライアントがサーバーに接続するとき、
//一意のソケットが生成され、辞書はソケットのマッピングをユーザー情報(ニックネームなど)に保持します
var connectionlist = {};
exports.startchat = function(io){
io.sockets.on( 'connection'、function(socket){
//クライアント接続時にソケットとユーザー名を保存します
var socketid = socket.id;
ConnectionList [socketid] = {
ソケット:ソケット
};
//ユーザーはチャットルームイベントに入り、他のオンラインユーザーにユーザー名をブロードキャストします
socket.on( 'join'、function(data){
socket.broadcast.emit( 'broadcast_join'、data);
connectionlist [socketid] .username = data.username;
});
//ユーザーはチャットルーム事件を残し、他のオンラインユーザーに出発を放送します
socket.on( 'disconnect'、function(){
if(connectionlist [socketid] .username){
socket.broadcast.emit( 'broadcast_quit'、{
username:connectionlist [socketid] .username
});
}
connectionlist [socketid]を削除します。
});
//ユーザースピーチインシデント、スピーチの内容を他のオンラインユーザーにブロードキャストする
socket.on( 'say'、function(data){
socket.broadcast.emit( 'broadcast_say'、{
ユーザー名:ConnectionList [socketid] .username、
テキスト:data.text
});
});
})
};
クライアント(socketchatclient.js)
コードコピーは次のとおりです。
var socket = io.connect( 'http:// localhost');
//サーバーに接続した後、すぐに「参加」イベントを送信して、他の人にユーザー名に伝えます
socket.emit( 'join'、{
ユーザー名:「ユーザー名hehe」
});
//チャットルームに参加する放送を受け取った後、メッセージが表示されます
socket.on( 'broadcast_join'、function(data){
console.log(data.username + 'チャットルームに追加');
});
//チャットルームを離れる放送を受け取った後、メッセージが表示されます
socket.on( 'broadcast_quit'、function(data){
console.log(data.username + 'levest theチャットルーム');
});
//他の誰かから送信されたメッセージを受信した後、メッセージが表示されます
socket.on( 'broadcast_say'、function(data){
console.log(data.username + 'say:' + date.text);
});
//ここでは、テキストボックステキストアレアと送信ボタンがあると仮定します。btn-send
// jQueryを使用してイベントをバインドします
$('。btn-send ')。クリック(function(e){
//テキストボックスのテキストを取得します
var text = $( 'textarea')。val();
// Sayイベントを送信すると、サーバーが受信したときにサーバーがブロードキャストします。
socket.emit( 'say'、{
ユーザー名:「ユーザー名hehe」
テキスト:テキスト
});
});
これは、必要に応じて拡張できるシンプルなチャットルームのデモです。 Socket.ioは基本的にさまざまなイベントの提出および受信処理であり、アイデアは非常に簡単です。