Top Banner
Sails WorkShop (4) 立命館大学 経営学部3回生  井口智勝
52

Sails workshop4

Jul 29, 2015

Download

Engineering

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sails workshop4

Sails WorkShop (4)

立命館大学 経営学部3回生  井口智勝

Page 2: Sails workshop4

SailsWorkShop の目的

<for All>

Watnowにリアルタイム通信技術を導入する

<for One>

取り敢えず、書けるようになること。(スピード重視)

ある程度、体系的な知識化もしていく。

Page 3: Sails workshop4

Sails WorkShop Menu

1回目:Sailsって何?CRUDappを作ろう!

2回目:Policiesの使い方 ~sessionや認証~

3回目:appをリアルタイム化しよう!

4回目:Sails✕Marionette

5回目:細かい部分の共有など...

Page 4: Sails workshop4

※今日は結構 コアにせまります。

Page 5: Sails workshop4

今日のアウトライン

Sails✕Marionetteでどう変わるか?

今回使うMarionetteアプリの説明

Sails✕Marionetteアプリを作ろう!

4回のWorkShopで触れなかった重要部分

2014/12/1(Mon)

Page 6: Sails workshop4

Sails✕Marionetteで どう変わるか?

Sails サーバー ブラウザ

httpリクエスト

htmlとか全て送信

役割重い

Page 7: Sails workshop4

Sails✕Marionetteで どう変わるか?

Sails サーバー Marionette

ブラウザ

非同期通信

JSON

役割軽い!Json返すだけのサーバー

{ user: ‘iguchi’, age: ’21'}

Page 8: Sails workshop4

Sailsサーバーは常にres.jsonでOK!

viewフォルダ必要なくなる。

assetsフォルダもいらない。

リクエストされるURLは決まっているので、blueprintsは全

てfalseでよい。(というかセキュリティ上切るべき。仕組みがわかっているなら、利用することでコード量を減らせる。今回はrestだけ使います。)

Sails✕Marionetteで どう変わるか?

Page 9: Sails workshop4

今日のアウトライン

Sails✕Marionetteでどう変わるか?

今回使うSailsChatアプリの説明

Sails✕Marionetteアプリを作ろう!

4回のWorkShopで触れなかった重要部分

2014/12/15(Mon)

Page 10: Sails workshop4

今回使う SailsChatアプリの説明https://github.com/igtm/SailsChatFront

https://github.com/igtm/SailsChatBack

両者をgrunt sailsliftで立ち上げてみると、、、?

オリジナルアプリです!!

Page 11: Sails workshop4

今日のアウトライン

Sails✕Marionetteでどう変わるか?

今回使うMarionetteアプリの説明

Sails✕Marionetteアプリを作ろう!

4回のWorkShopで触れなかった重要部分

2014/12/15(Mon)

Page 12: Sails workshop4

Sails✕Marionette でappを作ろう!

https://github.com/igtm/SailsChatFront

https://github.com/igtm/SailsChatBack

Page 13: Sails workshop4

環境設定

Page 14: Sails workshop4

front-backの分離に 必要な環境設定

sails.io.jsをmarionetteのvenderに入

れ,init.jsで定義。使うときは、各ファイルで定義する

sails.io.jsのL615を、sailsがある場所に変更。

config/cors.js allRoutes: true

Page 15: Sails workshop4

アプリの大枠説明

Page 16: Sails workshop4

ページ遷移

LoginPage TopPage

Room1

Room2

Room3

Page 17: Sails workshop4

ModelとController

User

Marionette Sails

Chat

User

Chat (永続化するなら必要)

User Controller

Chat Controller

Room Controller

Room

1多

Room (roomを作成削除するようなら

必要)

Page 18: Sails workshop4

Controllerの役割

User Controller

Chat Controller

Room Controller

Userの作成、ログイン

Chatの送信

Roomの入室、退室管理

Page 19: Sails workshop4

Socketによる、データのリアルタイム受け渡し部分

Page 20: Sails workshop4

UserModel

Page 21: Sails workshop4

io.socket.get()

io.socekt.on(‘user’)

marionette Sails

User.subscribe()

User.publishCreate()

switch(msg.verb) - created - destroyed

subscribe

UserModel

私はこういうものです。

新しいユーザーが ログインしたよ!

了解!通知出します!

User.publishDestroy()

ユーザーが ログアウトしたよ!

OK!変更があったら通知するね [create,destroy]

Page 22: Sails workshop4

左上(フロント側)

views/page/LoginItemV.js: L40

modelのsubscribeメソッド(自作)で

io.socket.postしてサーバーに購読させる。

UserModel

Page 23: Sails workshop4

右上(サーバー側)

UserController.jsのsubscribe

L17: 他人のpublishCreateを購読するwatch

L18: 他人の変更(UserModelの

autosubscribeに記載)を購読する。

UserModel

Page 24: Sails workshop4

右下(サーバー側)

UserController.jsのsubscribe

L20: createしたと発行

UserModel

Page 25: Sails workshop4

左下(フロント側)

modules/socket_manager.js

L16: userに変更があったら呼び出し

L19: verbごとに処理を分岐

UserModel

Page 26: Sails workshop4

RoomModel

Page 27: Sails workshop4

io.socket.post()

io.socekt.on(‘room’)

クライアント サーバー

Room.subscribe()

Room.publishAdd()

switch(msg.verb) - addedTo - removedFrom - messaged

enter

RoomModel

私はこういうものです。 OK!変更があったら通知するね [add:users, remove:users,message]

新しいユーザーが 入室したよ!

了解!通知出します!

Room.message()

ユーザーが 投稿したよ!

Page 28: Sails workshop4

左上(フロント側)

TopItemV.js L43

room/:room_id/users/:idにpost

RoomModel

Page 29: Sails workshop4

右上(サーバー側)

RoomController.js L10 enter

L13: room_idで購読。購読する動作は

RoomModelのautosubscribeに記載

RoomModel

Page 30: Sails workshop4

右下(サーバー側)

addToとremoveFromは後で説明

messageは ChatController: L15

RoomModel

Page 31: Sails workshop4

左下(フロント側)

modules.socket_manager

L17: roomに変更があったら呼び出し

L28: verbごとに処理を分岐

RoomModel

Page 32: Sails workshop4

取り敢えずここまで理解していればOK!

Page 33: Sails workshop4

細かい説明

Page 34: Sails workshop4

ModelのAssociations

難易度:★★★★★★★★★★★★★

大袈裟(笑)

Page 35: Sails workshop4

ModelのAssociations

リレーショナル・データベースのジョイントテーブルのようなものを作る機能

Page 36: Sails workshop4
Page 37: Sails workshop4
Page 38: Sails workshop4

ModelのAssociations

仮想属性を設定

相手が1ならmodel: ‘Model名’

相手が多ならcollection: ‘Model名’ via: ‘相手の仮想属性名’

多対多なら片方に優先設定 dominant: true

Page 39: Sails workshop4

modelを結合してデータを得るには?

populate(‘仮想属性’)でmodelを引っ張ってきてくれる。

ModelのAssociations

Page 40: Sails workshop4

Blueprintsの addとremove

難易度:★★★★★

Page 41: Sails workshop4

Blueprintsの add toとremove frompost /model/:id/collection名

で指定実体modelのcollectionにidを追加

delete /model/:id/collection名

で指定実体modelのcollectionにidを削除

Page 42: Sails workshop4

post /model/:id/collection名/:id

勝手に:idを追加してくれて、

publishAddまでしてくれる

Page 43: Sails workshop4

豆知識

Page 44: Sails workshop4

購読の階層Subsequent calls to subscribe are cumulative

今回は特に無しcreate destroy

add:users remove:users

message

UserModel

ログイン時 room入室時

ChatModel

Chat投稿時

RoomModel

Page 45: Sails workshop4

共有化できるモジュール

Page 46: Sails workshop4

Socekt_manager

Socketの変更を受信して、各種命令を出すオ

リジナルmodule

msg.verbで振り分けて、処理。

Page_managerは現在どのページにいるかなどを取得するオリジナルプラグイン

Page 47: Sails workshop4

Finished!!

お疲れ様でした!

Page 48: Sails workshop4

今日のアウトライン

Sails✕Marionetteでどう変わるか?

今回使うMarionetteアプリの説明

Sails✕Marionetteアプリを作ろう!

4回のWorkShopで触れなかった重要部分

2014/12/15(Mon)

Page 49: Sails workshop4

非同期I/O処理

出典:使いたくなる理由2:非同期I/O処理のnode.jsがサーバーリソースを抑える

Page 50: Sails workshop4

非同期I/O通信a()

b()

c()

I/O処理に関して上記関数が順番に実行される保証はない。

Page 51: Sails workshop4

非同期I/O通信

a(b(c()))

コールバックとして書くことで順番が担保される。

⇒コールバック地獄にならないように注意。

Page 52: Sails workshop4

URL一覧

https://github.com/igtm/SailsChatFront

https://github.com/igtm/SailsChatBack

https://github.com/balderdashy/sailsChat