system
マリンロード

2015.2.24システム開発 

マリンロード

node.jsのsocket.io (WebSocket)が楽しい!

お久しぶりです、Webクリエイターの飯岡です。

最近思い立ってnode.jsを使ったリアルタイムweb開発を勉強したりしています。
実際に個人でサイトを立ち上げて検証したりもしているなかで
websocketについてこれはすごいと思ったところを書いていきます。
websocketってなんぞ!?っていう方は調べてみるといいかもしれません。

接続方法は特にめんどくさくないです。
<<サーバー側>>
var io = require(“socket.io”).listen(8895);
io.sockets.on(“connection”, function (socket) {
 この中に処理を書きます。
});

<<クライアント側>>
var socket = io.connect(‘http://hogehoge.hoge:8895’);
socket.on(‘connect’, function() {
 この中に処理を書きます。
});

ここからは、実装例を書いていきます。

 以下ソースコード例(接続周りは省略)
 <<サーバー側>>
 socket.emit(‘sousin’,’これが送りたい文字だ!’);

 <<クライアント側>>
 socket.on(‘sousin’, function(data) {
  alert(data);
 });

 _人人人人人人人人人人_
 > これだけだと!? <
  ̄Y^Y^Y^Y^Y^Y^Y^ ̄

そうなんです、このコードを配置するとサーバー側でemitされた瞬間に
クライアント側に”これが送りたい文字だ!”と表示されます。
といってもこの状態では1:1の通信しかできません。
なので、サーバーから全クライアントに向けて(接続者以外)に
ブロードキャストでメッセージを送りたいときは

 <<サーバー側>>
 socket.broadcast.emit(‘sousin’,’これが送りたい文字だ!’);
 socket.emit(‘sousin’,’これが送りたい文字だ!’); // 本人にも送り返す場合はこれも書く

 <<クライアント側>>
 socket.on(‘sousin’, function(data) {
  alert(data);
 });

もちろんクライアント側に変更はいりません。

ちなみに複数クライアントが接続済みの状態で
特定の相手にだけメッセージを送りつけたい場合は
予めソケットIDを取得しておき。

 <<サーバー側>>
 var socketID = 送りたい相手のソケットID
 socket.to(socketID).emit(‘sousin’,’これが送りたい文字だ!’);

 <<クライアント側>>
 socket.on(‘sousin’, function(data) {
  alert(data);
 });

というようになります。

さらにさらに、チャットシステムなんていうのは
チャットルームがあって、そのチャットルームの中の会話は
チャットルーム内にしか見えないという実装が当然ですが
なんと!?
node.jsのsocket.ioにはその機能が最初からついてます。

まず、クライアント接続時に特定の条件で
そのクライアントを何処かの部屋に所属させます。

<<サーバー側>>
・まず接続者を参加させる
 socket.join(部屋IDっぽいなにか);
・ルームに所属している人にメッセージ送信
 ※ブロードキャストとちがって本人にも応答が戻ります。
 io.sockets.to(部屋IDっぽいなにか).json.emit(‘sousin’,’これが送りたい文字だ!’);

<<クライアント側>>
・受ける方としては変わりません。
 socket.on(‘sousin’, function(data) {
  alert(data);
 });

どうですか?簡単ですね。

今回は、node.jsを知っている人向けの情報でしたが
もしnode.jsをこれから学んでみたい方がいましたら
まずはsocketより先にnode.jsの基本を学んでみるといいかもしれません。

現役ウェブ解析士が教えるWebサイトの読み解き方 イメージ
システム開発サービスはこちら
ページTOPへ