Project Perfect讓Swift在服務器端跑起來-在Linux上建立你的Perfect項

編者語: 對於一個新事物,若是你花點心機仍是有不少收穫的。html

       前兩篇,分別講述了入門和在Linux下部署,如今得說說如何在Linux下開發了。在Linux下開發,相對比在Mac下開發更靈活。
       咱們先來看看構建基於Perfect的網站服務的編譯方式
       linux

       如圖經過引用基礎庫PerfectLib和數據連接,中間件模塊建立你的網頁文件,並用makefile打包生成你的網站動態庫。因此若是你只是在Linux下構建項目,你只須要先建立好你的Handlers.Swift便可。對比起在Xcode經過模版或者Framework的方式簡潔很多。這裏你們會想可否用Swift Package Manager引用PerfectLib的方式對Handlers.swift進行編譯?現階段是不能夠的,因爲Perfect是用動態庫的方式打包PerfectLib而Package Manager不支持動態庫的引用,因此若是你想整合Package Manager直接編譯你的Handlers.swift是不能夠的。(你只能寄望蘋果儘快支持)。如今你只能用makefile動態編譯。shell

       根據上面的方式咱們開始在Linux下建立咱們的Perfect項目。swift

       1. 關於建立的路徑,我的建議放在Github下載的Perfect目錄下,由於你須要引用對應的基礎庫,比較容易管理和調用。這裏我在Perfect文件夾建立了一個Demo文件夾,做爲新項目的目錄。
       app

       2. 在Demo文件夾下建立一個PerfectHandlers.swift 和 makefile。建議你們使用IDE進行編輯,這裏我建議使用Visual Studio Code,雖然是微軟的產品,可是勝在對swift支持較好,對比起atom更穩定。
       
       看看咱們的PerfectHandlers.swift,和前面說的同樣,代碼以下:frontend

[plain] view plain copy網站

 print?在CODE上查看代碼片派生到個人代碼片atom

  1. import PerfectLib  
  2.   
  3. public func PerfectServerModuleInit() {  
  4.   
  5.     Routing.Handler.registerGlobally();  
  6.       Routing.Routes["GET", ["/", "index.html"] ] = { (_:WebResponse) in return IndexHandler() }  
  7.   
  8.   
  9. }  
  10.   
  11. class IndexHandler: RequestHandler {  
  12.   
  13.     func handleRequest(request: WebRequest, response: WebResponse) {  
  14.         response.appendBodyString("hello swift")  
  15.         response.requestCompletedCallback()  
  16.     }  
  17. }  

       而makefile就是咱們把Demo編譯成動態庫的關鍵文件了,先看看代碼:spa

[plain] view plain copy.net

 print?在CODE上查看代碼片派生到個人代碼片

  1. # Makefile for Perfect Server  
  2.   
  3. TARGET = Demo  
  4. OS = $(shell uname)  
  5. DEMO_SRC = "PerfectHandlers.swift"  
  6. PERFECT_ROOT = ../PerfectLib  
  7. SWIFTC = swift  
  8. SWIFTC_FLAGS = -frontend -c -module-cache-path $(MODULE_CACHE_PATH) -emit-module -I /usr/local/lib -I $(PERFECT_ROOT)/linked/LibEvent \  
  9.     -I $(PERFECT_ROOT)/linked/OpenSSL_Linux -I $(PERFECT_ROOT)/linked/ICU -I $(PERFECT_ROOT)/linked/SQLite3 -I $(PERFECT_ROOT)/linked/LinuxBridge  
  10. MODULE_CACHE_PATH = /tmp/modulecache  
  11. Linux_SHLIB_PATH = $(shell dirname $(shell dirname $(shell which swiftc)))/lib/swift/linux  
  12. SHLIB_PATH = -L$($(OS)_SHLIB_PATH)  
  13. LFLAGS = $(SHLIB_PATH) -lFoundation -lswiftCore -lswiftGlibc /usr/local/lib/PerfectLib.so -Xlinker -rpath -Xlinker $($(OS)_SHLIB_PATH) -shared  
  14.   
  15. all: $(TARGET)  
  16.   
  17. modulecache:  
  18.     @mkdir -p $(MODULE_CACHE_PATH)  
  19.   
  20. $(TARGET): modulecache  
  21.     $(SWIFTC) $(SWIFTC_FLAGS) $(DEMO_SRC) -o $@.o -module-name $@ -emit-module-path $@.swiftmodule  
  22.     clang++ $(LFLAGS) $@.o -o $@.so  
  23.   
  24. clean:  
  25.     @rm *.o  

          makefile 這裏有幾個關鍵的地方須要注意,

 

          a. TARGET是編譯目標和你的項目名保持一致, 這裏就是TARGET = Demo

          b. DEMO_SRC 這個是須要把你的全部swift文件包含進去,由於要一塊兒打包到靜態庫內,你能夠參考Examples/Authenticator內的makefile      

         3. 在終端,編譯便可,執行sudo make編譯成功以下圖
         
         4. 把生成的Demo.so遷移到Perfect/var/www/PerfectLibraries中(改目錄的建立和使用請參考 http://blog.csdn.net/kinfey/article/details/50664353) 
         
         5. 執行sudo ./perfectServerHttp.sh start 便可
                   在Linux下建立Perfect項目,讓Perfect項目的維護和升級更有保障了,並且比在Xcode下建立項目更加簡單直接,建議你們上手使用

相關文章
相關標籤/搜索