我是一個IT宅男,從高中那會兒便開啟了自己的SNS社交之路。這七、八年的光景都用在了SNS社交上,其中有微笑、有汗水、也有心酸。我出門採光,會拍幾張分享到SNS社交;遇見有損社會的行為,果會斷在SNS社交曝光;心裡有點小情緒,會發到SNS社交吧一吐為快。漸漸的,我習慣了從SNS社交去尋找那些冷不丁的笑點,從文筆大咖的SNS社交中獲取文藝的逼格,從IT大牛的SNS社交裡汲取業界動態和新鮮的知識。而在諸多SNS社交系統中我最早接觸的開源社交SNS還是基於web2.0版本開發的ThinkSNS。
透過一些網路檢索發現,像知乎等相關網站裡關於ThinkSNS的專業技術資訊相對較少,許多程式設計師們想檢索一些關於ThinkSNS技術文件卻無從取得。因此我便寫了這篇關於ThinkSNS技術的文章同諸多喜歡ThinkSNS的創業家分享,同時也為開發者提供自己在科技上的見解。
一、我們常說的TS是什麼?
首先,我們來熟悉下什麼是TS,TS就是「ThinkSNS」的縮寫,因此喜愛TS程式的人,我們稱喜愛TS程式的人,我們說之為TSer。 TS是一款開源程序,程式碼託管平台是GitHub,所有的細節修改,都是透明性更新。 用戶可以透過官方網站( http://www.thinksns.com)和官方示範社群(Demo站http://demo.thinksns.com)以及GitHub倉庫(https ://github.com/medz/ThinkSNS-4)獲得TS最新的開發動態~當然,如果你有興趣也可以Pull requesTS(簡稱PR)代碼給TS開發人員,開發人員得到代碼之後如果符合開源需求,就會合併到TS版本的當中,如果一般使用者遇到問題,可以在demo站或Github中提交Issues,均會得到開發人員的統一回應。 TS對PHP版本要求壓得比較低,基本行業都跨入了php5.5 or php5.6階段了~但是考慮到國內大部分小眾虛擬主機以及很多對相關專業知識不了解的人,所以,TS把php版本壓低到了php5.3.12版本~當然,有人認為為什麼小版本是12,這個版本是php5.3的第一個穩定版~也就是這個小版本之前的版本都不是穩定版,所以不建議安裝使用。 二、Laravel框 🎜>TP框架
TS在2016年的開發過程中做了較大的底層架構變動。眾所周知,TS的底層是基於ThinkPHP框架進行二次修改的,用戶不能就ThinkPHP直接對TS進行升級其中一個主要原因就是TP框架並非完全遵循的MIT開源協定。當然,對開發者來說TP框架技術架構本身也存在著不夠先進、過於抽象的問題。所以綜合考慮,TS在資料交換時使用了Laravel框架的Eloquent ORM 。 Eloquent ORM 的優點是什麼?這款ORM對資料的處理比較類似Node.js的資料處理即一切皆為對象,而且ORM對資料關係的處理效率是不輸於doctrine的,這也是TS這麼選擇的原因。當然,考慮更多的是為以後更先進的架構做準備。 TS將慢慢採用拓展方式進行開發,並對整個TS程式做架構資料交換等。 新的ORM的引入讓TS考慮php7平台的運行,但php7已經完全刪除了MySQL的 連接方式,只有PDO和MySQLi。那麼,如果想要在php7環境下運行,必定對DB類別做重新修改,但是考慮到相容性的問題,所以目前依舊在舊的應用上,還是由model產生SQL,然後把SQL交給PDO來執行。而新開發的應用和功能均使用全新的ORM做的數據開發。
三、
除了引進新的ORM,TS還有許多技術優勢,例如:有更容易被理解和整合的基類。這些基類是在第三方函式庫的基礎上進行二次封裝,使TS的模組開發中設定的屬性更加標準,也讓開發入門更簡單。因為,如果繼承等都是由開發者去整合第三方的類,那麼按照國情,這幾乎是不可能的。而在此基礎上開發者只需要看下基類,就知道整合後自己需要做什麼,無需去學習第三方類。
TS新的拓展(目前是應用)中,原來的靜態資源直接引用應用下的資源,在新的架構中,TS的應用都會被統一移動到一個公開緩存目錄中,方便外部調用。如此設計是為了使得TS更加安全。這樣使用者就可以在不暴露程式碼的前提下得到應用程式中嵌套的靜態資源,站長或者開發人員可以更安全的把非公開程式碼保留在暴露目錄的上層隱藏起來。
那TS具體有哪些功能特色呢?這個問題基本上是仁者見仁智者見智了。因為TS集大成於一身,除了包含社交核心功能外,還有微吧、頻道、資訊,活動、商城等,同時還有許多不同行業屬性的TS合作產品,如圖:
四、聊天和風向是社交的核心
的即時聊天和風向是獨立聊天的原生系統。我們知道,聊天和風向才是社交的核心。在PC中,TS使用JS輪詢來實現訊息的接收等操作;在行動端中,TS使用了先進的技術方式—Socket技術,為了確保使用者記錄的不遺失,避免了P2P點對點傳輸,程式由一個客戶端推送給伺服器,伺服器在把訊息轉推給另一個客戶端,並在資料庫中幾率,達到了多端同時到達的目的。
五、TS中基礎的技術重點
不上點乾貨的分析都是流氓。下面,就來講講TS中基礎的技術要點吧。 TS中,應用程式都有一個設定文件,目前應用程式目錄是apps/
我們可以看到這是比較新的應用程式配置,舊的應用程式只需要設定「resource」項目即可,設定這項後,靜態資源會快取到「storage /app/
實現上述所說就不得不提新的應用安裝類,命名空間是TSHelperAppInstall -對新的應用機製做了一些列處理(目前是靜態資源緩存),應用的運行器也是位於該在命名空間下,「TSHelperController」這個及時運行器,只需要傳入App Name,Controller Name, Action Name,運行器會透過Composer中查找到應用程式註冊的命名空間,來運行所需的控制器程式碼。
說到這裡,不得不提一點重要的技術加入,就是Composer套件管理工具。 Composer可以說是所有語言的套件管理工具中最好的工具,其提供了第三方套件的規範集成,升級,卸載,還有符合PSR-0和PSR-4規範的AutoLoader工具。這使得TS中不在需要冗餘的自訂自動載入來尋找我們需要的類別檔案和庫檔案了,使用Composer就可以直接註冊。我們用個最簡單的例子來說明:
據了解TS開發團隊正在開發的全新Web Application應用,其中的重要程式碼存在於apps/
言歸正傳,TS怎麼找到 Controller的呢?
其實TS做的事情很簡單,建構一個「App
此項新技術的引入,不僅減少了繁重的開發工作,而且使得TS程式碼更加簡單,因為我們不在關心和TS本身程式碼無關的事情,我們只需要專注自己程式碼部分的開發即可。所以TS的程式碼包,除開第三方函式庫,從去年的24MB減少到了現在的21MB,為什麼還是這麼大?因為TS在使用新的技術的同時,要考慮到舊的模組的運作需求,現在無能為力把舊的模組都重新開發一次,因為沒有這個必要。我們總不能說,生了一個孩子,孩子長醜了就塞回去重新生的吧!
TS改變的重點在ORM的加入,那麼新的資料model要怎麼使用呢?來個基礎的繼承代碼:
沒錯,加上註解也就20行,那和之前的模型繼承有什麼差別?一個差別在於傳遞參數的改變,ORM支援在MySQL,SqlLite,SQL server等資料庫中自由切換。另一個差異在於定義的關鍵字的改變,一但定義了模型,就可以對錶經常操作了,是不是很簡單。上表中,查詢一條feed_id是1的數據,很簡單,Feed::find(1)。 OK,我們已經查詢完成了。當然,回傳的是一個object,而不是純資料的Array。
如果你想把它變成你想要的數組,例如$feed就是上面的查詢回傳的數據,那麼只需要 $feed->toArray()就可以做到。如果我們能知道表格的字段,我們就可以直接把查詢出來的資料當成物件成員的形式讀取,例如$feed->feed_id或$feed->cTime,也可以直接把這個物件傳遞給foreach來對屬性進行遍歷,由此看出,新的ORM對資料處理我們無需像以前那樣對數組操作,但是我們可以對遍歷等在以前的基礎上不變。
當然,具體的更多用處,可以查詢Laravel框架官方文檔,再舉一個ORM中關係的例子。
public function phone()
{
return $this->hasOne('Phone');
}
在上面的方法定義一個這樣的方法,我們一對一的關聯了Phone這個模型,$data = Feed::find(1)->phone 我們就可以得到phone主鍵feed_id和feed表相同的值的表對象。是不是很方便?
最後再來一點controller上面的事情把,在TS中封裝了一個叫做「TSBaseNoneController」的基類,在你的控制器下,定義一個叫做「App
六、ThinkSNS不透過這篇文章的介紹,各位是否真的了解了TS,而這只是TS中的鳳毛麟角,但也是不可忽視的。 TS一直在成長,盡其所能的為創業者增添動力加速。
總結:TS架構先進,程式碼符合PSR規範,使用者使用簡單,相容性高,創業者可以輕鬆的適應TS來滿足自己的業務需求,開發者可以在極短的時間內入手。
時間對技術人員和創業家來說,是最昂貴的成本,ThinkSNS的祈望和宗旨,是讓創業者,開發者把精力都放在自己該做的事情上。
|