Swift搭建服務端

原文:Hello Server Side Swifthtml

做者:Logan Wright前端

譯者:CocoaChina--kmyhy(博客)linux

自從蘋果官方發佈了一個 Swift 的 Linux 開源版本以後,服務端 Swift 終於迎來了一個使人激動的前景。個人好奇心終於沒法剋制,是時候嘗試一下服務端 Swift 了!git

除了用過幾個 Baas 之外,我沒有任何後端編程經驗,但幸運的是開源社區已經提供了現成的框架。我試了一下Tanner Nelson 推薦的 Vapor 框架。它的使用很是簡單,很是適合我當前的任務,在這篇文檔中還會使用到 Heroku。我決定使用 Heroku 的緣由是咱們的後端團隊在使用它,它對於前端來講很是友好。github

寫到這裏的時候,爲了解決 Heroku 框架運行中的幾個小問題,我專門提交了一個 pull request 。若是代碼還沒被合併的話,請設置你的包管理器從 這裏 下載。web

安裝編程

要繼續本教程,首先,你須要一個 Heroku 帳號 ,並安裝好 Swift Development Snapshot 。寫到這裏的時候,在它的正式版中還未包含 swift 包管理器。所以爲了使用這個工具,你必須下載開發版的 snapshot。json

開始swift

咱們的目標是建立一個簡單的 Swift 服務器並運行在 Heroku 上。這不須要在 linux 環境下進行,就像是你在使用本地服務器。你只消建立一個本地的 Xcode 項目,對項目進行一些設置,而後就能夠在 Swift 包管理器 中運行它。整過過程分爲 4 個步驟:後端

將 main.swift 拷貝根目錄下的 Sources 目錄

1-tDOVF1vc5Uvu5LH-POZWJg.png

建立一個 Package.swift 文件

2.png

將 .build 目錄添加到 import paths 

要使用自動補全和語法加亮功能,須要將 Swift 包管理器的 build 目錄提交到 import paths 中。注意,在 import paths 的 Debug 中設置的 debug 目錄,而 Release 項則輸入 release 目錄。

3.png

用 toolchain 運行 Xcode

若是你使用 Xcode 7.3,你能夠用 Xcode > Toolchains 菜單開啓一個Xcode 實例,用於打開 swift snapshot。由於咱們不能在 Xcode 中進行編譯,咱們只能以命令行的方式進行編譯。

4.png

編寫服務器

令我高興的是,爲了進行概念驗證,我須要編寫的代碼其實只有寥寥數行。我啓動和運行服務器的代碼甚至不到 10 行。

5.png

要啓動服務器,只需在終端中輸入一句命令,:

6.png

好了,讓咱們打開瀏覽器。個人瀏覽器安裝了 json 插件,你的畫面或許會有不一樣。

7.png

遷移到雲上

服務器在本地順利運行起來了,但若是放到雲端則更好。我火燒眉毛地想將 App 在雲上跑起來。對於我來講這是一個全新的挑戰,幸運的是,我獲得了 Vincent Toms 的悉心指導。

Heroku 的安裝是一件很是愉悅的體驗,幾分鐘後我就建立了一個 Heroku App,接下來我就要上傳個人項目了。

出錯啦

這只是今天的諸多錯誤中的一個。我已經預計到事情不可能一路順風,所以我查看了 Vapor 的文檔,最終發現問題出在所謂的 buildpacks 上。Heorku 提供了一些標準的 buildpacks,但徹底沒有針對 Swift 的 buildpacks。無奈之下求救於開源社區,恰好看到 Kyle Fuller 的 buildpack 。集成它就簡單得多了。

1-sPMOvBe3ErU8en-iSux3NQ.png

用這個 buildpack 啓動後,App 成功加載,接下來就是訪問它的 URL。

再次出錯

1-e_VLrPClAxsB54qrf8YyoA.png

事情不會那麼順利的,是吧?通過 google 一番,仔細查看了一些例子,我發現我還差一個 Procfile。瀏覽一下這個文件的內容,你就能明白這個文件是幹什麼用的了。

8.png

buildpack 建立了可執行文件,但 Heroku 並不知道。經過 Procfile,咱們告訴 Heroku 去運行 SwiftServerIO 可執行文件。上傳這個 Procfile。

仍然出錯

Heroku 編譯的 2 分支彷彿變得無比漫長。我從新打開了瀏覽器,發現仍然報錯。

9.png

我覺得 Heroku 可能還未啓動完成(實際不是),所以我又等了一小會,終於發現出錯了。可執行文件生成了, process file 也就緒,必定是別的什麼地方出問題了。再次 google,一直到我最終發現我須要設置 App 的規模(scale up)。這要使用到 Heroku 的 toolbelt 中的一個簡單命令。

heroku ps:scale web=1

10.png

Heroku 在免費狀況下只有一個 dyno(Heroku 計費單位,10~50 個請求/秒)。但對於咱們的簡單服務器來講,這也夠了。所以,在咱們將 scale web 設置爲 1 個 dyno 以後,再次用瀏覽器查看。

成功了!

11.png

成功了!服務器啓動,出現了萬能的 hello world!通過一番歡呼雀躍以後,讓咱們真正來問一聲好吧!

響應請求

在 main.swfit 文件中添加一小段代碼,讓服務器在問好的同時可以因人而異。就微微偷一下懶,新加一個路由,讓服務器根據輸入輸出不一樣的問候語。

12.png

一切正常,但根據通常規律,我仍然作好了出錯的心理準備。提交修改,push 代碼到 Heroku。

Say Hello!

13.png

大約一份多鐘的編譯以後,在瀏覽器中訪問 URL,服務器返回了問候語。你能夠在這裏查看效果 。

接下來是什麼?

能夠說,服務端 Swift 的今天離不開社區強大支持。對於我來講,可以從雲端獲取 JSON 是一個使人興奮的開始,我已經火燒眉毛地想看看接下來還會發生什麼。

固然在此以前,我不得不和我在 Intrepid Pursuits 的同事們一塊兒,繼續編寫一個有一個 iOS App。若是你想了解個人最新動態,請在訪問個人 Github 或者 Twitter

服務端 Swift 

附言

在 這裏 下載源代碼。

在 Journal 文件夾中,是 step-by-step 指南。

相關文章
相關標籤/搜索