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下建立项目更加简单直接,建议你们上手使用

相关文章
相关标签/搜索