SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Sails WorkShop (3)
立命館大学 経営学部3回生 
井口智勝
SailsWorkShop
の目的
<for All>
Watnowにリアルタイム通信技術を導入する
<for One>
取り敢えず、書けるようになること。(スピード重視)
ある程度、体系的な知識化もしていく。
Sails WorkShop
Menu
1回目:Sailsって何?CRUDappを作ろう!
2回目:Policiesの使い方 ∼sessionや認証∼
3回目:appをリアルタイム化しよう!
4回目:Sails✕Marionette
5回目:細かい部分の共有など...
今日のアウトライン
リアルタイム通信って?
Pub-sub方式って?
appをリアルタイム化しよう!(3)
感想
2014/12/1(Mon)
リアルタイム通信
クライ
アント
サーバー
クライ
アント
クライ
アント
従来の通信
クライ
アント
サーバー
クライ
アント
クライ
アント
リアルタイム通信
Pub - Sub
出版・購読型モデル
メッセージの送信者(出版側)が特定の受信者
(購読側)を想定せずにメッセージを送るよう
プログラムされたものである。
出版側と購読側の結合度が低い
MarionetteでいうCommunicatorな感じ
io.socket.get()
io.socekt.on(‘Model’)
クライアント サーバー
‘Model’.subscribe()
‘Model’.publishCreate()
switch(msg.verb)
- created
- addTo
- message
- …
Pub-Sub方式
私はこういうものです。 OK!変更があったら通知するね
変更あったよ!変更の種類別で処理を変えようっと
io.socket.get()
io.socekt.on(‘Model’)
クライアント サーバー
‘Model’.subscribe()
‘Model’.publishCreate()
switch(msg.verb)
- created
- addTo
- message
- …
Pub-Sub方式
私はこういうものです。 OK!変更があったら通知するね
変更あったよ!変更の種類別で処理を変えようっと
client / publish
io.socket.get(‘/user/subscribe’);
io.socket.post(‘/user/subscribe’);
io.socket.put(‘/user/subscribe’);
io.socket.delete(‘/user/subscribe’);
io.socket.get()
io.socekt.on(‘Model’)
クライアント サーバー
‘Model’.subscribe()
‘Model’.publishCreate()
switch(msg.verb)
- created
- addTo
- message
- …
Pub-Sub方式
私はこういうものです。 OK!変更があったら通知するね
変更あったよ!変更の種類別で処理を変えようっと
“購読”の種類
classとinstance
Class room 「作成」を購読
-> 自動: config/blueprints/autowatch:true
-> 手動: Model.watch(req.socket)
Instance room「編集」「削除」を購読
-> Model.subscribe(req.socket, 対象)
実体化される時
すでにある実体
が変更される時
Instance room
subscribe(req.socket, record, [監視する動き])
デフォルトの[監視する動き]: update, destroy,
message (for custom messages), add:* and
remove:* (publishAdd and publishRemove
messages for associated models).
[監視する動き]のデフォルト値をmodel内の属性
autosubscribeで配列定義できる。なければ全て。
クライアント 監視する対象
io.socket.get()
io.socekt.on(‘Model’)
クライアント サーバー
‘Model’.subscribe()
‘Model’.publishCreate()
switch(msg.verb)
- created
- addTo
- message
- …
Pub-Sub方式
私はこういうものです。 OK!変更があったら通知するね
変更あったよ!変更の種類別で処理を変えようっと
server / publish
message(record, obj, 除外したいsocket)
publishCreate()
publishUpdate()
publishRemove()
publishDestroy()
ただ知らせるだけ。(ex: createした後に、publishCreateで知らせる)
record: 送り先が持ってる値。uidならその人1人に。roomidならその
roomidを持ってる(roomにいる)人へ送る。
自分に送りたくないなら、req.socketを第3引数に。
io.socket.get()
io.socekt.on(‘Model’)
クライアント サーバー
‘Model’.subscribe()
‘Model’.publishCreate()
switch(msg.verb)
- created
- addTo
- message
- …
Pub-Sub方式
私はこういうものです。 OK!変更があったら通知するね
変更あったよ!変更の種類別で処理を変えようっと
client / subscribe
io.socket.on(‘connect’, function(){}
io.socket.on(‘モデル名’, function(message){}
message
- data (送られたデータ)
- id
- verb
(created,addedTo,updated,removedFrom,destroyed,message
d)
その他Tips
Sails.sockets - 手動でもsocketを扱える
sails.io.js - クライアント側の便利library
ではでは、
appを
リアルタイム化しよう!(3)
環境設定
underscore.js(クライアント側に、JSTで
template内のファイルをjsで扱うのに必要)
online.pngとoffline.png
ソース
https://github.com/igtm/sails-sample-
app1 完成ソース
https://github.com/igtm/sails-sample-
app1/compare/v0.1...v0.2 前回からの変
更が見れる
View
user/index.ejs
L5
L18∼L22
onlineかどうかの画像を表示
templates/
newColumn.ejs
新規作成
誰かが新規登録した際に、一覧画面に行をリア
ルタイムで増やすためのテンプレート
task/pipeline.js
L50
templateファイルに入ってる .ejsをjsで扱え
るようにするという設定
Config
config/policies.js
L38
config/blueprints.js
L138
autoWatchをtrueにすることで、
publishCreateを実行できるようにしている
(代わりにModel.watch()で手動にしてもい
いが)
api
policies/
sessionAuth.js
デフォルトであるやつ
L14: 別に付け足さなくても問題ない。
L17: 403を返す
models/User.js
L30∼L33
onlineかそうでないかの属性
本題。socket部分!
サーバー側
UserController
L46∼L51
online: trueにして再度save
L51: 送るデータ=user 除外する宛先=
req.socket(自分)
UserController
L89
消されるmodelのid=req.param(‘id') 除
外する宛先=req.socket(自分)
UserController
L94-L105
L100: publishCreateを購読する(autowatch:
trueしてるので必要ない)
購読するsocket=req.socket 購読する実体=
users
※subscribeはsocket.getとかでrequestされな
いとつかえない。$.ajaxとかは無理
SessionController
L56-L64
変化したmodelのid=user.id 送りたい
data={loggedIn……}
クライアント側
app.js - 全体像 -
sails.io.jsがまず自動でコネクトしてくれる。
connectイベント発火で、船の絵が出てくる。
L15: サーバに購読させる
L12: userモデルでpublish…がされたら
callbackへ
app.js - userInDom
-
userモデルでpublishCreate等が発火した
callback
verbで振り分け
UserIndexPage: 一覧画面の操作等
Well Done!
sails liftして
ブラウザを2つ立てて確認してみよう!
感想
socketの使い方がv0.10とv0.9
全然違うやん(泣)
ドキュメント読むのが
一番速い(笑)
開発者のgitにsampleアプリが上がっ
ているので参考にしてみてください。

Weitere ähnliche Inhalte

Ähnlich wie Sails workshop3

2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント
2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント
2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイントServerworks Co.,Ltd.
 
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則株式会社スカイアーチネットワークス
 
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWSJAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS陽平 山口
 
サーバーレスでLINE Clova スキル開発+LINE との接続
サーバーレスでLINE Clova スキル開発+LINE との接続サーバーレスでLINE Clova スキル開発+LINE との接続
サーバーレスでLINE Clova スキル開発+LINE との接続Madoka Chiyoda
 
構築事業の支援プラットフォームについて
構築事業の支援プラットフォームについて構築事業の支援プラットフォームについて
構築事業の支援プラットフォームについてSix Apart KK
 
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化Etsuji Nakai
 
クラウド事業者に求めるビジネス要件
クラウド事業者に求めるビジネス要件クラウド事業者に求めるビジネス要件
クラウド事業者に求めるビジネス要件雄哉 吉田
 
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化Takamitsu Nakao
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドToshiakiArai
 
アドテク案件入門講座 8月20日(公開版)
アドテク案件入門講座 8月20日(公開版)アドテク案件入門講座 8月20日(公開版)
アドテク案件入門講座 8月20日(公開版)伊藤 孝
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜Akihiro Kuwano
 
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」Serverworks Co.,Ltd.
 
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築cloudconductor
 
Re: ご注文は自動化ですか?[2]
Re: ご注文は自動化ですか?[2]Re: ご注文は自動化ですか?[2]
Re: ご注文は自動化ですか?[2]Masahito Zembutsu
 
企業報告会スライド
企業報告会スライド企業報告会スライド
企業報告会スライドRei Li
 
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazugKatsuya Shimizu
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?Masahito Zembutsu
 
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発Takashi Watanabe
 

Ähnlich wie Sails workshop3 (20)

2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント
2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント
2012年02月 CloudDays 上司を説得してAWS利用をOKさせる3つのポイント
 
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則
スカイアーチセミナー:自社アプリをクラウド展開する為の『失敗しない3つの法則
 
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWSJAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
 
サーバーレスでLINE Clova スキル開発+LINE との接続
サーバーレスでLINE Clova スキル開発+LINE との接続サーバーレスでLINE Clova スキル開発+LINE との接続
サーバーレスでLINE Clova スキル開発+LINE との接続
 
イマドキのCMSトレンドからWeb運用を再考する
イマドキのCMSトレンドからWeb運用を再考するイマドキのCMSトレンドからWeb運用を再考する
イマドキのCMSトレンドからWeb運用を再考する
 
構築事業の支援プラットフォームについて
構築事業の支援プラットフォームについて構築事業の支援プラットフォームについて
構築事業の支援プラットフォームについて
 
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化
 
クラウド事業者に求めるビジネス要件
クラウド事業者に求めるビジネス要件クラウド事業者に求めるビジネス要件
クラウド事業者に求めるビジネス要件
 
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化
微博(ウェイボ)型社内SNSとモバイルで始める社内の可視化
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
 
アドテク案件入門講座 8月20日(公開版)
アドテク案件入門講座 8月20日(公開版)アドテク案件入門講座 8月20日(公開版)
アドテク案件入門講座 8月20日(公開版)
 
Social Literacy
Social LiteracySocial Literacy
Social Literacy
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜
 
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
 
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
 
Re: ご注文は自動化ですか?[2]
Re: ご注文は自動化ですか?[2]Re: ご注文は自動化ですか?[2]
Re: ご注文は自動化ですか?[2]
 
企業報告会スライド
企業報告会スライド企業報告会スライド
企業報告会スライド
 
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
 

Sails workshop3