SlideShare a Scribd company logo
1 of 12
Download to read offline
AWS+Node.js+Sails.js+Redis 
によるスケーラブルWebSocket 
http://goo.gl/dB9tN8
動機 
http://goo.gl/dB9tN8 
俺「メールPJでメールだけじゃなく、WebSocketも使ってリアルタイムに通知するとかどうっすかね」 
I川さん「いいんじゃないですか」 
俺「でもやるとなったらスケーラブルなのかどうかが気になりますよね」 
I川「そうですね」 
-5分後- 
俺「あ、RedisのPub/Subっていうのを使うとスケールアウト出来るらしいです」 
I川「そうなんですね。あ、じゃあそれをネタにLT用に何かアプリ作ってみたらどうですか」 
俺「そうですね。じゃあチャットアプリ作ります」 
I川さん「で、作ったらユニットで使えばいいじゃないですか」 
俺「そ、そうですね…」
Berry's Waffle(http://goo.gl/dB9tN8) 
Berryのおしゃべり(=waffle)アプリケーション 
・WebSocketでリアルタイム送受信 
・Node.jsをスケールアウト 
・女子力高め 
・デスクトップ通知(webkit系のみ)
http://goo.gl/dB9tN8 
WebSocketって何 
要するにクライアント、サーバ間でコネクションを何度も張ることなく 
リアルタイム双方向通信出来るよってこと。 
詳しくはwikiをどうぞ。http://ja.wikipedia.org/wiki/WebSocket
Node.jsを使う理由 
http://goo.gl/dB9tN8 
WebSocket周辺の技術を便利に使う為のSocket.IOというライブラリ 
を使いたいから。 
Sails.jsは? 
Socket.IOも使えるMVCフレームワーク。 
Sails.jsの現行最新のv0.10.4を使った例がweb上ではあまり無かったので 
やってみたかった。
Redisのpub/subを使う? 
http://goo.gl/dB9tN8 
pub=publish(発行), sub=subscribe(購読)。 
例えば、Process1がRedisに「chatチャンネルをSubscribe 
します」と伝えます。 
次に、Process2がRedisに対して「chatチャンネルにメッセ 
ージをPublishします」と伝えます。 
すると、chatチャンネルをSubscribeしている全てのプロセス 
にメッセージが伝えられます。
サーバ構成 
ELB 
EC2 EC2 
ElastiCache 
AWS 
http://goo.gl/dB9tN8 
ELB 
Port Configuration: 
80 (TCP) forwarding to 1337 (TCP) 
EC2 
Node.js(Sails.js)が1337ポートをリッスン 
ElastiCache 
Redisが6379ポートをリッスン
subscribe(購読)登録実装 
door.ejs(クライアントサイド) 
RoomController.js(サーバサイド) 
http://goo.gl/dB9tN8
publish(発行)実装 
door.ejs(クライアントサイド) 
http://goo.gl/dB9tN8 
ChatController.js(サーバサイド) door.ejs(クライアントサイド 待ち受け)
デスクトップ通知(おまけ) 
door.ejs 
http://goo.gl/dB9tN8
苦労した点(AWSの) 
ELBのPort Configuration 
最初は 80 (HTTP) forwarding to 1337 (HTTP) 
としていたが、コネクションが切れまくった。 
WebSocketは、HTTP→WebSocketに移行するので 
80 (TCP) forwarding to 1337 (TCP)でないと駄目 
ElastiCacheのSecurityGroup 
最初はローカルからつなげて稼働確認したかったので、 
InboundにTCP(6379)でxx.xxx.xx.xxx/32(自宅IP)を指定したが 
自宅からもEC2からも繋がらなかった。 
→ElastiCacheはEC2からの接続しか許可してなかった。自宅IPはずしたらいけた。
おわり 
・github 
https://github.com/raccoon-berry/waffle 
・berry’s waffle 
http://goo.gl/dB9tN8

More Related Content

What's hot

JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話sairoutine
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)崇之 清水
 
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprinttaiju higashi
 
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみるSaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみるMasashi Murakami
 
AWS Builders KANSAI - re:Inventの遊び方
AWS Builders KANSAI - re:Inventの遊び方AWS Builders KANSAI - re:Inventの遊び方
AWS Builders KANSAI - re:Inventの遊び方Daiki Mori
 
Sass実践編+Compass入門
Sass実践編+Compass入門Sass実践編+Compass入門
Sass実践編+Compass入門Yoshiya OKI
 
AsssetStoreに頼ってVRコースターを作ってみる
AsssetStoreに頼ってVRコースターを作ってみるAsssetStoreに頼ってVRコースターを作ってみる
AsssetStoreに頼ってVRコースターを作ってみるYo Takezawa
 
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件Seito Taka
 
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )崇之 清水
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!Naoto Ishizawa
 
Ec2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリットEc2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリットKatsuhiro Masaki
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnativeTakuro Sasaki
 
20090717 Ruby Kaigi Lightning Talk
20090717  Ruby Kaigi  Lightning Talk20090717  Ruby Kaigi  Lightning Talk
20090717 Ruby Kaigi Lightning Talkaxsh co., LTD.
 
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみようa-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみようSeiko Kuchida
 
JAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LTJAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LT三七男 山本
 
webアプリケーションフレームワークの話
webアプリケーションフレームワークの話webアプリケーションフレームワークの話
webアプリケーションフレームワークの話Yoshihiro Ura
 
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイトDeep Learning Lab(ディープラーニング・ラボ)
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術豊明 尾古
 

What's hot (20)

JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
20150523
 20150523 20150523
20150523
 
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
AWSはとんでもないものを盗んでいきました(JawsDays2013@shimy_net)
 
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい・はやい・うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
 
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみるSaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
 
AWS Builders KANSAI - re:Inventの遊び方
AWS Builders KANSAI - re:Inventの遊び方AWS Builders KANSAI - re:Inventの遊び方
AWS Builders KANSAI - re:Inventの遊び方
 
Sass実践編+Compass入門
Sass実践編+Compass入門Sass実践編+Compass入門
Sass実践編+Compass入門
 
AsssetStoreに頼ってVRコースターを作ってみる
AsssetStoreに頼ってVRコースターを作ってみるAsssetStoreに頼ってVRコースターを作ってみる
AsssetStoreに頼ってVRコースターを作ってみる
 
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
 
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチでAWS自動化(JAWS-UG-LT @shimy_net )
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
 
Ec2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリットEc2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリット
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
 
20090717 Ruby Kaigi Lightning Talk
20090717  Ruby Kaigi  Lightning Talk20090717  Ruby Kaigi  Lightning Talk
20090717 Ruby Kaigi Lightning Talk
 
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみようa-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
a-blog cms 勉強会 in 札幌 x SaCSS 2016 投稿画面を改良してみよう
 
JAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LTJAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LT
 
webアプリケーションフレームワークの話
webアプリケーションフレームワークの話webアプリケーションフレームワークの話
webアプリケーションフレームワークの話
 
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術
 

Similar to Berry'sWaffle

VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発Ryosuke Izumi
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発Tatsumi Naganuma
 
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」Satoshi Noda
 
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するAWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するKahori Takeda
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015Ryo Nakamaru
 
12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッションKei Nakazawa
 
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話Kanako Kobayashi
 

Similar to Berry'sWaffle (10)

VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
 
10回目nodejs
10回目nodejs10回目nodejs
10回目nodejs
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」
2013/03/09 VisualStudio勉強会 LT 「統合開発環境の支援ツール」
 
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するAWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
 
200813 fgdc mandai
200813 fgdc mandai200813 fgdc mandai
200813 fgdc mandai
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション
 
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話
 

Berry'sWaffle