嘗試Swift服務(wù)器框架 - Perfect

為什么選擇的是Perfect脖隶?

最近在關(guān)注Swift的服務(wù)器框架产艾,其中主流框架前三分別是:

Vapor是借鑒Laravel框架的,如果你之前是試用Laravel框架做開發(fā)讲逛,那么使用Vapor更容易一些傲绣。

IBM的Kitura咆爽,是一個(gè)Express.js 風(fēng)格的框架,知乎上有關(guān)于它的討論如何評(píng)價(jià)IBM云平臺(tái)支持蘋果Swift腮介,以及推出swift語言的web框架Kitura肥矢?

但我為什么選擇使用Perfect呢?主要是因?yàn)橛腥藢?duì)這幾個(gè)框架以及Node.js做了對(duì)比叠洗,Perfect各項(xiàng)表現(xiàn)非常優(yōu)異甘改,所以選擇了這個(gè)框架。具體對(duì)比數(shù)據(jù)可以看這篇文章:不服跑個(gè)分 - 頂級(jí) Swift 服務(wù)端框架對(duì)決 Node.js

Results Summary.png

配置

官方原版資料:http://www.perfect.org/docs/gettingStartedFromScratch.html
首先你需要安裝Swift 3.0

swift --version
// 打印
Apple Swift version 3.0 (swiftlang-800.0.33.1 clang-800.0.31)
Target: x86_64-apple-macosx10.9

如果你是Ubuntu Linux灭抑,還需要執(zhí)行下面命令安裝OpenSSL,libssl-dev, uuid-dev

sudo apt-get install openssl libssl-dev uuid-dev

你可以使用Perfect的PerfectTemplate工程開始學(xué)習(xí)

  git clone https://github.com/PerfectlySoft/PerfectTemplate.git
  cd PerfectTemplate

進(jìn)去發(fā)現(xiàn)十艾,臥槽!沒有.xcodeproj文件名挥,這要怎么運(yùn)行呢???
其實(shí)Apple提供了一個(gè)package工具疟羹,swift的包管理工具(暫時(shí)不支持iOS主守,watchOS和tvOS),不需要下載榄融,swift里已經(jīng)自帶了参淫。有時(shí)間推薦研究一下。
github地址: https://github.com/apple/swift-package-manager

進(jìn)到PerfectTemplate目錄下運(yùn)行下面命令

swift build

等待鏈接一堆git的倉庫之后愧杯,運(yùn)行下面命令

.build/debug/PerfectTemplate

你就可以看到輸出

 Starting HTTP server on 0.0.0.0:8181 with document root ./webroot

訪問http://localhost:8181/ 就可以看到輸出了Hello, world!

經(jīng)過上面的步驟涎才,就已經(jīng)成功搭建了一個(gè)本地的Swift服務(wù)器了。但是力九,總不能讓我寫代碼時(shí)候一個(gè)一個(gè).swift寫代碼吧耍铜,作為蘋果自己的東西,怎么也得支持Xcode吧跌前,要不然我怎么開心的coding呢棕兼。
放心,蘋果當(dāng)然提供了這樣的功能抵乓,還是使用剛才那個(gè)swift-package-manager伴挚。運(yùn)行:

swift package generate-xcodeproj

這是會(huì)自動(dòng)生成一個(gè)PerfectTemplate.xcodeproj,打開點(diǎn)擊Run就可以了灾炭。

如果你遇到了Perfect 2.0 -lCOpenSSL link error的錯(cuò)誤
可以在PROJECT -> Build Setting -> Library Search Paths 中添加$(PROJECT_DIR) 并設(shè)置為Recursive

搭建自己的工程

寫的很好的官方文檔地址:
http://www.perfect.org/docs/gettingStartedFromScratch.html

搭建自己的工程很簡單茎芋,主要還是依賴蘋果的swift-package-manager,而這個(gè)工具主要是依賴Package.swift文件蜈出,作用跟cocoapodsPodfile類似田弥。

mkdir MyAwesomeProject
cd MyAwesomeProject
touch Package.swift // 創(chuàng)建
open Package.swift // 打開

輸入下面代碼

import PackageDescription

let package = Package(
    name: "MyAwesomeProject",
    dependencies: [
        .Package(
        url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git",
        majorVersion: 2, minor: 0
        )
    ]
)

主要的作用是說我們的工程需要依賴Perfect-HTTPServer.git,Perfect現(xiàn)在版本是2.x的版本铡原,所以majorVersion是2偷厦。
然后運(yùn)行下面命令,創(chuàng)建一個(gè)Sources目錄和main.swift眷蜈。

mkdir Sources
touch Sources/main.swift
open 

輸入下面代碼

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

// Create HTTP server.
let server = HTTPServer()

// Register your own routes and handlers
var routes = Routes()
routes.add(method: .get, uri: "/", handler: {
        request, response in
        response.setHeader(.contentType, value: "text/html")
        response.appendBody(string: "<html><title>Hello, world!</title><body>Hello, world!</body></html>")
        response.completed()
    }
)

// Add the routes to the server.
server.addRoutes(routes)

// Set a listen port of 8181
server.serverPort = 8181

do {
    // Launch the HTTP server.
    try server.start()
} catch PerfectError.networkError(let err, let msg) {
    print("Network error thrown: \(err) \(msg)")
}

之后就需要build一下了

swift build
.build/debug/MyAwesomeProject

訪問http://localhost:8181/ 就可以看到輸出的結(jié)果了沪哺。

到這里,基本的工程配置就完成了酌儒,之后我會(huì)講一下我的工程做的一些模塊選型辜妓,主要是模版模塊和orm模塊,以及他們的組裝忌怎。謝謝~籍滴!

參考文章

Perfect 官網(wǎng)
Perfact-github
Swift
Swift-github
swift-package-manager
令世人驚嘆的服務(wù)器端 Swift!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榴啸,一起剝皮案震驚了整個(gè)濱河市孽惰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸥印,老刑警劉巖勋功,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦报,死亡現(xiàn)場離奇詭異,居然都是意外死亡狂鞋,警方通過查閱死者的電腦和手機(jī)片择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骚揍,“玉大人字管,你說我怎么就攤上這事⌒挪唬” “怎么了嘲叔?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抽活。 經(jīng)常有香客問我硫戈,道長,這世上最難降的妖魔是什么下硕? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任掏愁,我火速辦了婚禮,結(jié)果婚禮上卵牍,老公的妹妹穿的比我還像新娘。我一直安慰自己沦泌,他們只是感情好糊昙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谢谦,像睡著了一般释牺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上回挽,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天没咙,我揣著相機(jī)與錄音,去河邊找鬼千劈。 笑死祭刚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墙牌。 我是一名探鬼主播涡驮,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喜滨!你這毒婦竟也來了捉捅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤虽风,失蹤者是張志新(化名)和其女友劉穎棒口,沒想到半個(gè)月后寄月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡无牵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年漾肮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合敦。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡初橘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出充岛,到底是詐尸還是另有隱情保檐,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布崔梗,位于F島的核電站夜只,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒜魄。R本人自食惡果不足惜扔亥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谈为。 院中可真熱鬧旅挤,春花似錦、人聲如沸伞鲫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秕脓。三九已至柒瓣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吠架,已是汗流浹背芙贫。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傍药,地道東北人磺平。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像怔檩,于是被迫代替她去往敵國和親褪秀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 UI下拉刷新模糊效果A...
    袁俊亮技術(shù)博客閱讀 11,928評(píng)論 9 105
  • 嗯哼嗯哼蹦擦擦~~~ 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 ...
    philiha閱讀 4,885評(píng)論 0 6
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫薛训、插件媒吗、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 12月2日到5日,一場盛大的藝術(shù)展在廣州拉開帷幕乙埃。提前一個(gè)月購好票闸英,激動(dòng)地等待這場藝術(shù)展覽的到來锯岖。 坦白說我并非藝...
    小璃的世界閱讀 275評(píng)論 1 0
  • 誓縛蒼龍四海驚,燎原圣火起洪城甫何。 餐風(fēng)飲露何曾懼出吹?戴月披星幾度輕! 剔骨鋼刀由血鑄辙喂,倚天鐵劍自心生捶牢。 旌旗獵獵山河...
    牧云軒閱讀 678評(píng)論 9 14