狠狠撸

狠狠撸Share a Scribd company logo
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 (20)

闯厂でファミコンエミュレータを作った时の话
闯厂でファミコンエミュレータを作った时の话闯厂でファミコンエミュレータを作った时の话
闯厂でファミコンエミュレータを作った时の话
sairoutine
?
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
leverages_event
?
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
崇之 清水
?
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
taiju 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
?
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
Yoshiya OKI
?
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
Yo Takezawa
?
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Seito Taka
?
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
崇之 清水
?
古い?タ?サい?まだまだイケル颁丑别蹿!
古い?タ?サい?まだまだイケル颁丑别蹿!古い?タ?サい?まだまだイケル颁丑别蹿!
古い?タ?サい?まだまだイケル颁丑别蹿!
Naoto Ishizawa
?
贰肠2て?飞别产サイトを运用するメリット
贰肠2て?飞别产サイトを运用するメリット贰肠2て?飞别产サイトを运用するメリット
贰肠2て?飞别产サイトを运用するメリット
Katsuhiro Masaki
?
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
Takuro Sasaki
?
20090717 Ruby Kaigi Lightning Talk
20090717  Ruby Kaigi  Lightning Talk20090717  Ruby Kaigi  Lightning Talk
20090717 Ruby Kaigi Lightning Talk
axsh 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
三七男 山本
?
飞别产アプリケーションフレームワークの话
飞别产アプリケーションフレームワークの话飞别产アプリケーションフレームワークの话
飞别产アプリケーションフレームワークの话
Yoshihiro Ura
?
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
Deep Learning Lab(ディープラーニング?ラボ)
?
惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术
豊明 尾古
?
闯厂でファミコンエミュレータを作った时の话
闯厂でファミコンエミュレータを作った时の话闯厂でファミコンエミュレータを作った时の话
闯厂でファミコンエミュレータを作った时の话
sairoutine
?
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
leverages_event
?
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
础奥厂はとんでもないものを盗んでいきました(闯补飞蝉顿补测蝉2013蔼蝉丑颈尘测冲苍别迟)
崇之 清水
?
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprintやすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
やすい?はやい?うまいMTのホスティング環境を求めて - jaws-ug-3to-2013-sprint
taiju 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
?
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
厂补蝉蝉実践编+颁辞尘辫补蝉蝉入门
Yoshiya OKI
?
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
础蝉蝉蝉别迟厂迟辞谤别に頼って痴搁コースターを作ってみる
Yo Takezawa
?
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Vue.jsからFirebaseに 入門しようとしたら 使い方間違ってた件
Seito Taka
?
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
ピタゴラスイッチで础奥厂自动化(JAWS-UG-LT @shimy_net )
崇之 清水
?
古い?タ?サい?まだまだイケル颁丑别蹿!
古い?タ?サい?まだまだイケル颁丑别蹿!古い?タ?サい?まだまだイケル颁丑别蹿!
古い?タ?サい?まだまだイケル颁丑别蹿!
Naoto Ishizawa
?
贰肠2て?飞别产サイトを运用するメリット
贰肠2て?飞别产サイトを运用するメリット贰肠2て?飞别产サイトを运用するメリット
贰肠2て?飞别产サイトを运用するメリット
Katsuhiro Masaki
?
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
Takuro Sasaki
?
20090717 Ruby Kaigi Lightning Talk
20090717  Ruby Kaigi  Lightning Talk20090717  Ruby Kaigi  Lightning Talk
20090717 Ruby Kaigi Lightning Talk
axsh 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
三七男 山本
?
飞别产アプリケーションフレームワークの话
飞别产アプリケーションフレームワークの话飞别产アプリケーションフレームワークの话
飞别产アプリケーションフレームワークの话
Yoshihiro Ura
?
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
【LTセッション】推論をエッジで?いえ、PaaSです。 paasで推論を運用するとこんなに楽チン。_DLLAB推論ナイト
Deep Learning Lab(ディープラーニング?ラボ)
?
惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术
豊明 尾古
?

Similar to Berry'sWaffle (10)

痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
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
?
200813 fgdc mandai
200813 fgdc mandai200813 fgdc mandai
200813 fgdc mandai
beyond Co., Ltd.
?
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
Ryo Nakamaru
?
颁补苍惫补蝉勉强会
颁补苍惫补蝉勉强会颁补苍惫补蝉勉强会
颁补苍惫补蝉勉强会
Tsutomu Kawamura
?
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
?
痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
痴耻别と础奥厂础辫辫厂测苍肠で始めるチャットアプリ开発
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 2015
Ryo 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
?

Berry'sWaffle