2013:7:15 pump

24
Pump.io進度報告 partI 2013/7/15 13715星期

Upload: -

Post on 10-May-2015

249 views

Category:

Technology


1 download

DESCRIPTION

pump.io 中文簡易教學 描述一些pump.io的架構

TRANSCRIPT

Page 1: 2013:7:15 pump

Pump.io進度報告partI2013/7/15

13年7月15⽇日星期⼀一

Page 2: 2013:7:15 pump

目標

概述

目前進度

架設過程

Demo

13年7月15⽇日星期⼀一

Page 3: 2013:7:15 pump

概述:What is Pump.io?

pump.io is an activity stream server

that models a social network

REST API

13年7月15⽇日星期⼀一

Page 4: 2013:7:15 pump

Activities

記錄發生什麼事情

主詞 - 動詞 - 物件結構

可擴展的結構

13年7月15⽇日星期⼀一

Page 5: 2013:7:15 pump

Subject - Verb - Object

原生動作:Like, Post...

也可以自己定義:hate, ate...

ex:

Evan posted a photo

Bill ate a breakfast burrito at Celia's.

13年7月15⽇日星期⼀一

Page 6: 2013:7:15 pump

Audience

概念像是follow

只有 audience 可以看到活動

ex:

All Laura’s followers

People on David’s “Family” list

13年7月15⽇日星期⼀一

Page 7: 2013:7:15 pump

Streams

活動的集合

圍繞一個主題舉辦

ex:

The activities Bill did

The activities about an image

13年7月15⽇日星期⼀一

Page 8: 2013:7:15 pump

REST API

JSON 回傳

所有的 streams 接可讀

有的可以寫

13年7月15⽇日星期⼀一

Page 9: 2013:7:15 pump

Representing Objects

Unique ID

Object type

Other information varies by type

{ "id": "tag:social.example,2013:user:1481", "objectType": "person", "displayName": "Evan Prodromou", "url": "http://social.example/evanp", "image": { "url": "http://avatar.social.example/evanp.jpg" }}

13年7月15⽇日星期⼀一

Page 10: 2013:7:15 pump

Representing activitiesActor(an object)

Verb

Object(object)

Summary{ "id": "urn:uuid:85e80e20-cd1b-11e2-82f1-c8f73398600c", "actor": { "id": "tag:social.example,2013:user:1481", "objectType": "person" }, "verb": "create", "object": { "id": "http://social.example/note/13", "objectType": "note", "content": "Hello, World" }, "summary": "Evan created a note."}

13年7月15⽇日星期⼀一

Page 11: 2013:7:15 pump

目前進度

架設完成,差SSL

可以運行第三方活動,但是還無法登入

了解整體架構中

13年7月15⽇日星期⼀一

Page 12: 2013:7:15 pump

架設過程

node.js,其中運用到非常多的套件

Database : mongoDB or redis

Database firmware : databank

13年7月15⽇日星期⼀一

Page 13: 2013:7:15 pump

git clone -> 下載整個專案

npm install -> 從 package.json 的設定中,安裝需要的套件

npm install databank-mongodb or databank-redis -> 安裝node.js app 與 database 連結的firmware

13年7月15⽇日星期⼀一

Page 14: 2013:7:15 pump

pump.io.json

整個 pump.io 的設定檔

需要放到 /etc 這個目錄之下

有許多的 key - value

13年7月15⽇日星期⼀一

Page 15: 2013:7:15 pump

執行

先要把 mongoDB 或是 redis 建立起來

mongoDB -> mongod --dbpath=dbs 將資料放到dbs這個目錄之下,mongo 啟動 client 端的管理資料庫介面。

redis -> src/redis-server 啟動資料庫,src/redis-cli 啟動 client 端的管理資料庫介面

13年7月15⽇日星期⼀一

Page 16: 2013:7:15 pump

npm start -> 運行pump.io

會建立cluster,每個 instance 都會開啟一個app

13年7月15⽇日星期⼀一

Page 17: 2013:7:15 pump

結構

npm start 其實是要npm依照package.json的設定來運行,設定維運行 bin/pump 這個執行檔。

執行檔中除了將 etc/pump.io.json 讀入之外,並建立了複數個cluster,每一個cluster都會去建立一個node.js app

makeApp(config, function(err, app) { if (err) { console.log(err); process.exit(1); } else { app.run(function(err) {}); }

13年7月15⽇日星期⼀一

Page 18: 2013:7:15 pump

app.js

依照 express 套件的架構建立一個 app,express 套件的重點就是有一套完整的 route 規則,相當輕鬆就可以建立REST api。

app.js中除了載入route之外,也設定了像是與資料庫連線等等。

route 的規則被獨立成幾個file,像是web.js(web頁面)以及api.js(api功能)

13年7月15⽇日星期⼀一

Page 19: 2013:7:15 pump

web.js

輸入url,導到該頁面

ex:

url : http://127.0.0.1/

app.get("/", app.session, principal, addMessages, showMain);

表示此url會觸發這個get的事件,後面的參數部分是變數,部分是函式

13年7月15⽇日星期⼀一

Page 20: 2013:7:15 pump

showMain()showMain函式將前面的參數帶入,並判別目前使否維登入狀態

已登入 -> 個人頁面,未登入 -> 起始頁面var showMain = function(req, res, next) { if (req.principalUser) { req.log.info({msg: "Showing inbox for logged-in user", user: req.principalUser}); showInbox(req, res, next); } else { req.log.info({msg: "Showing welcome page"}); res.render("main", {page: {title: "Welcome", url: req.originalUrl}}); }};

13年7月15⽇日星期⼀一

Page 21: 2013:7:15 pump

前端介面

backbone.js

utml template

13年7月15⽇日星期⼀一

Page 22: 2013:7:15 pump

main.utml<div id="main"> <div class="hero-unit"> <div class="row"> <div class="span6"> <h1><%- config.site %></h1> <p>This site runs <a href="http://pump.io/">pump.io</a>, the! high-performance Open Source social engine. It pumps your life! in and out of your friends, family and colleagues. </p> <p><a class="btn primary large" href="/main/register">Get Started &raquo;</a></p> </div> <div class="span4"> <img src="images/somefriends.jpg" width="340" height="235" class="img-rounded" /> </div> </div> </div></div>

13年7月15⽇日星期⼀一

Page 23: 2013:7:15 pump

其他的tag咧?(body, head...)

13年7月15⽇日星期⼀一

Page 24: 2013:7:15 pump

backbone.js

backbone.js的機制,一個固定的模組,並將中間抽換成utml建立的頁面

還沒有研究很深刻

以上

網址:http://pump.io、https://e14n.com

13年7月15⽇日星期⼀一