SlideShare a Scribd company logo
1 of 20
Download to read offline
socket.ioと
リアルタイムWeb
2014.1.22
今日の内容
リアルタイムweb
WebSocket
socket.io
コード例
デモ
今回の利用想定(プッシュ通知)
リソースとかの話
バージョンの話
リアルタイムweb
リアルタイムwebは、インターネット上のユーザの書き込みや動
向を、即時かつ大規模に他のユーザと共有する仕組みの総
称。
                                   by wiki
facebookや
twitterのアレ。
リアルタイムweb
クライアント・サーバ間の双方向通信
 
  ・クライアント→サーバはajaxでもいい
  ・サーバ→クライアントのプッシュ通信
   (とりわけリアルタイム性を高めたい場合)

WebSocket!!

http://www.lgtm.in/g
リアルタイムweb
WebSocket
RFCで標準化されたアプリケーション層・通信プロトコル
XMLHttpRequest (Ajax)との違いは?
 ⇒ 双方向通信の際のコストが違います。

  XMLHttpRequest : コネクション都度生成
  WebSocket : コネクション生成は初回のみ
リアルタイムweb
Http Polling, JSONP Polling

http://codezine.jp/article/detail/7075
リアルタイムweb
Comet (HTTP Streaming, HTTP Long polling)

Apache Server
 ・ keep-alive
 ・ MaxClients
の制約をモロに受ける ..

http://codezine.jp/article/detail/7075
リアルタイムweb
Plugin Socket

http://codezine.jp/article/detail/7075
リアルタイムweb
WebSocket

http://codezine.jp/article/detail/7075
WebSocket
コネクション生成はこんな感じ
Client

Server

Client

time

Server

自由にやり取り
http://ja.wikipedia.org/wiki/WebSocket
WebSocket
http://www.websocket.org/echo.html
Socket.io

http://nodejs.org/

Socket.io = Node.js上で動作するライブラリ
WebSocketを利用して、リアルタイムWebを実現可能
(WebSocketは通信プロトコルの選択肢の一つ)
Socket.io
ブラウザ対応が充実

http://socket.io/
コード例
サーバサイド
# socket.io
io = require('socket.io').listen(config.SOCKET_PORT);
io.sockets.on 'connection', (socket) ->
socket.on 'message', (message) ->
obj = JSON.parse(message)
message = obj.coord + ':' + socket.id;
socket.emit("message", message)
socket.broadcast.emit("message", message)
socket.on 'disconnect', () ->
# nothing to do
コード例
クライアントサイド
// 接続時
var socket = io.connect(CONFIG.SOCKET_HOST);
// 受信時
socket.on('message', function (msg){
var data = msg.split(':'),
userId = data[2], // マウスカーソルを動かしたユーザの識別子
position = [data[0], data[1]], // マウスカーソルの座標
page_url = data[3];
// マウスカーソルを動かしたユーザのマウスカーソルを自分の画面に描画する
renderCursor(userId, position, page_url);
});
コード例
クライアントサイド
// 送信時
var handler = function (event) {
var x, y, window = $(document);
x = event.pageX / window.width();
y = event.pageY / window.height();
var send_data = {"coord": [x, y].join(":"),
"page_url": page_url};
socket.send(JSON.stringify(send_data));
};
// イベントハンドラを設定
$(document).mousemove(handler);
今回使う(かもしれない)ところ
例えばこんなやつ

http://ameblo.jp/ameba--customize/entry-11276330557.html
今回使う(かもしれない)ところ
指定のセグメントに対して実行する。
 
 ⇒ コネクションの識別が必要

ストレージ(mongoDB)を利用して、
ユーザ識別子とコネクションの識別子をマッピング
userId (unique)

connectionId (unique)

status

1

Zc5YSKMrfGhf

active

2

E4ydv6F6h43Y

active

3

jA8atTMjeLKi

inactive
今回使う(かもしれない)ところ
Some Events

Client

-----

Server

⑤

④

DB

①

施策判定

②
③

socket

userId : xx
connId: yy
気を付けたいところ
リソース面
 ・ 結局TCP/IPの上の技術なので、
  TCPコネクションを維持するために、
  ファイルディスクリプタを消費する。
  ⇒ PV単位とかで生成するとメモリ死なないか怖い。
  ⇒ チューニングとサイジングが重要
  ⇒ githubに負荷テストコード転がってるので、
     やってみる

More Related Content

More from エンジニア勉強会 エスキュービズム

Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたエンジニア勉強会 エスキュービズム
 

More from エンジニア勉強会 エスキュービズム (20)

React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリングReact Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
 
Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみた
 
はじめての品質
はじめての品質はじめての品質
はじめての品質
 
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
 
機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow
 
Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。
 
ほんのりTDD
ほんのりTDDほんのりTDD
ほんのりTDD
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
IoTで何をやったか
 
2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)
 
Dockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについてDockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについて
 
VRのコンテンツ
VRのコンテンツVRのコンテンツ
VRのコンテンツ
 
Azureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについてAzureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについて
 
レイアウトについて
レイアウトについてレイアウトについて
レイアウトについて
 
アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)
 
何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
IoTのIを考えてみる話
 
AzureのIaaSとかの話
AzureのIaaSとかの話AzureのIaaSとかの話
AzureのIaaSとかの話
 
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ
 
【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた
 
Dockerを社内で使うために
Dockerを社内で使うためにDockerを社内で使うために
Dockerを社内で使うために
 

Socket.io slideshare エンジニア勉強会20140122