用 Swift 寫(xiě)服務(wù)器端

你好揭鳞,服務(wù)端的Swift

自從蘋(píng)果公司正式發(fā)布了一個(gè)適用于linux的開(kāi)源版本后炕贵,服務(wù)端的Swift擁有了令人興奮的前景。我的好奇心終于戰(zhàn)勝了我野崇,是時(shí)候嘗試一下服務(wù)端的Swift了称开。

除了很少的BaaS經(jīng)驗(yàn),我沒(méi)有其他后端經(jīng)驗(yàn)乓梨,不過(guò)慶幸的是開(kāi)源社區(qū)已經(jīng)花了很大精力在編寫(xiě)框架鳖轰。我花了一些時(shí)間試了這些框架,最后決定使用Tanner NelsonVapor扶镀。它安裝簡(jiǎn)單蕴侣,很適合我的任務(wù),而且在文檔中它顯示了支持Heroku(譯者注:Heroku是一個(gè)支持多種編程語(yǔ)言的云平臺(tái)即服務(wù))狈惫。我選擇Heroku是因?yàn)樗俏覀兒蠖苏谑褂盟χ耄鼘?duì)于前端來(lái)說(shuō)很友好鹦马。

*至寫(xiě)這篇文章為止胧谈,為了能夠在Heroku上正常運(yùn)行,我(對(duì)vapor)做了一些更改并且發(fā)起了一個(gè)pull request荸频。如果代碼沒(méi)有被合并菱肖,你可以使用包管理器在這里下載。

安裝

開(kāi)始之前旭从,你需要一個(gè)Heroku賬戶并且安裝Swift Development Snapshot稳强。寫(xiě)這篇文章的時(shí)候场仲,Swift正式版安裝包并沒(méi)有包含Swift包管理軟件,為了使用這個(gè)工具(Swift包管理軟件)退疫,你需要下載開(kāi)發(fā)版的安裝包渠缕。

開(kāi)始

我們的目標(biāo)是啟動(dòng)一個(gè)在Heroku上運(yùn)行的簡(jiǎn)單Swift服務(wù)器,并且這個(gè)服務(wù)器能返回hello褒繁。 不需要運(yùn)行在linux環(huán)境中亦鳞,它就像使用本地服務(wù)器。這意味著(只需要)建立一個(gè)本地Xcode工程并且配置它棒坏,再在swift package manager中運(yùn)行它燕差。包含4個(gè)主要步驟:

將main.swift文件移動(dòng)到Sources文件夾的頂層

增加 Package.swift文件

增加 .build目錄到import paths

要使我們導(dǎo)入的框架獲得自動(dòng)補(bǔ)全和語(yǔ)法高亮,swift package manager的編譯目錄需要添加到import paths?坝冕。確認(rèn)在debug設(shè)置中導(dǎo)入了debug文件夾徒探,release設(shè)置則導(dǎo)入release文件夾。

使用toolchain 運(yùn)行 Xcode

如果你使用 Xcode 7.3喂窟,你可以用 Xcode > Toolchains 菜單開(kāi)啟一個(gè)Xcode 實(shí)例测暗,來(lái)使用 swift

snapshot。?需要注意的是即使做了以上的操作谎替,我們還是不能在Xcode里面編譯偷溺,需要使用swift

build命令在命令行(終端)中編譯。

創(chuàng)建服務(wù)器

僅僅需要寫(xiě)很少的代碼就可以啟動(dòng)和運(yùn)行來(lái)驗(yàn)證某個(gè)想法钱贯,這讓我很驚喜挫掏。用來(lái)小于10行的代碼,我把服務(wù)器啟動(dòng)并運(yùn)行了秩命。

這里使用命令行在終端啟動(dòng)并運(yùn)行服務(wù)尉共。

目前為止看起來(lái)不錯(cuò),讓我們?cè)跒g覽器中檢查一下弃锐。你屏幕上的顯示看起來(lái)可能和我的不同袄友,因?yàn)槲沂褂昧?a target="_blank" rel="nofollow">json formatter plugin這個(gè)插件(譯者注:一款chrome插件,能夠讓json數(shù)據(jù)格式化顯示)霹菊。

部署到云服務(wù)器

本地配置服務(wù)器看起來(lái)比較順利剧蚣,但是如果能遠(yuǎn)程部署就更酷啦。我迫切的希望把這個(gè)app部署在那個(gè)(Heroku)云服務(wù)上面旋廷。這對(duì)我來(lái)說(shuō)是未知領(lǐng)域鸠按,幸運(yùn)的是我從Vincent Toms那里找了一些極好的指南幫助我解決了很多問(wèn)題。

Heroku部署令人有愉快的體驗(yàn)饶碘,幾分鐘之內(nèi)我就把我的app部署上了目尖,我的toolbelt安裝上了,我已經(jīng)準(zhǔn)備好提交我的項(xiàng)目了扎运。

失敗

這是今天諸多失敗之一瑟曲。我意料到事情不會(huì)如此的順利饮戳,我去查看vapor的文檔,最后目光停留在那些名為 buildpacks的新奇東西上洞拨。Heroku提供了一些標(biāo)準(zhǔn)的現(xiàn)成的buildpacks扯罐,不過(guò)還沒(méi)關(guān)于Swift的任何buildpacks,令人驚嘆的開(kāi)源社區(qū)又一次提供了解決辦法烦衣,我看到Kyle Fuller’s buildpack這個(gè)篮赢,集成它比較簡(jiǎn)單。

當(dāng)你把這個(gè)buildpack安裝之后琉挖,app成功加載了启泣,是時(shí)候訪問(wèn)真實(shí)世界的網(wǎng)址了。

更多失敗

事情沒(méi)有那么容易示辈,是吧寥茫。我谷歌了一下并且認(rèn)真看了看一些例子,我發(fā)現(xiàn)我需要一個(gè) Profile矾麻∩闯埽看到文件內(nèi)容就能明白這個(gè)文件的目的是什么了。

這個(gè)buildpack建立了可執(zhí)行文件弄喘,但是Heroku并不知道它。我們要在Profile中告訴Heroku運(yùn)行SwiftServerIO這個(gè)可執(zhí)行文件甩牺。上傳這個(gè)Profile文件蘑志。

更多失敗第二部分

Heroku編譯的兩分鐘非常漫長(zhǎng),我迅速的刷新瀏覽器卻只看到了這個(gè):

我想或許是因?yàn)镠eroku需要一些時(shí)間來(lái)啟動(dòng)(其實(shí)不是)贬派,我等了一會(huì)發(fā)現(xiàn)還是有問(wèn)題急但。生成了可執(zhí)行文件,process文件準(zhǔn)備好了搞乏,肯定還有一些東西有問(wèn)題波桩。又google了一下我最終發(fā)現(xiàn)需要設(shè)置這個(gè)應(yīng)用的scale。在Heroku

toolbelt中運(yùn)行一個(gè)簡(jiǎn)單的命令请敦。

heroku ps:scale web=1

Heroku 只提供一個(gè)免費(fèi)的dyno(譯者注:類(lèi)似于云服務(wù)器中的實(shí)例镐躲,Heroku給出的定義是一個(gè)能夠運(yùn)行用戶指定命令的Linux容器),這對(duì)于我們簡(jiǎn)單的服務(wù)器夠用了侍筛。進(jìn)行了如上操作之后萤皂,這個(gè)dyno正常的運(yùn)行起來(lái)了,這時(shí)我們?cè)偃z查一下瀏覽器勾笆。

成功了

好了敌蚜,服務(wù)器運(yùn)行起來(lái)了桥滨,帶著常見(jiàn)的hello world提示窝爪。自我慶祝了半天之后弛车,是時(shí)候來(lái)問(wèn)候一下了。

響應(yīng)

在我們的main.swift文件中增加一些代碼來(lái)讓服務(wù)器更人性化的打招呼蒲每,增加另一個(gè)get路由點(diǎn)纷跛,稍微偷下懶拌屏,讓服務(wù)器將輸入直接返回作為回應(yīng)专筷。

一切應(yīng)當(dāng)順利忍坷,但是鑒于一般的開(kāi)發(fā)情況彻秆,我已做好遇到另一個(gè)路由錯(cuò)誤的準(zhǔn)備屹耐。提交變更燃领,推送代碼到Heroku颗味。

說(shuō)Hello

花一些時(shí)間進(jìn)行配置后舔亭,(將文件)加入到我的hello服務(wù)器就像推送到Heroku那樣簡(jiǎn)單脖律。過(guò)了一分鐘左右的編譯時(shí)間谢肾,這個(gè)鏈接變成了激活狀態(tài),服務(wù)器返回了Hello小泉。你可以點(diǎn)擊查看效果芦疏。

接下來(lái)呢

我現(xiàn)在看到的所有跡象,有力的證明了,?服務(wù)端的Swift有了社區(qū)的支持微姊,會(huì)變得更加強(qiáng)大酸茴。對(duì)于我來(lái)說(shuō),從遠(yuǎn)程獲得真正的JSON是令人興奮的第一步兢交,我迫不及待的想要看接下來(lái)的內(nèi)容了薪捍。

在那之前,我會(huì)和同事在Intrepid Pursuits接著寫(xiě)iOS應(yīng)用配喳,如果你想要知道我的動(dòng)態(tài)飘诗,可以關(guān)注我的我的Github或者Twitter中的任意一個(gè)。

服務(wù)端Swift!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末界逛,一起剝皮案震驚了整個(gè)濱河市昆稿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌息拜,老刑警劉巖溉潭,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異少欺,居然都是意外死亡喳瓣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)赞别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畏陕,“玉大人,你說(shuō)我怎么就攤上這事仿滔』莼伲” “怎么了犹芹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鞠绰。 經(jīng)常有香客問(wèn)我腰埂,道長(zhǎng),這世上最難降的妖魔是什么蜈膨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任屿笼,我火速辦了婚禮,結(jié)果婚禮上翁巍,老公的妹妹穿的比我還像新娘驴一。我一直安慰自己,他們只是感情好灶壶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蛔趴。 她就那樣靜靜地躺著,像睡著了一般例朱。 火紅的嫁衣襯著肌膚如雪孝情。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天洒嗤,我揣著相機(jī)與錄音箫荡,去河邊找鬼。 笑死渔隶,一個(gè)胖子當(dāng)著我的面吹牛羔挡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播间唉,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绞灼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呈野?” 一聲冷哼從身側(cè)響起低矮,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎被冒,沒(méi)想到半個(gè)月后军掂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昨悼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蝗锥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片率触。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡终议,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穴张,我是刑警寧澤细燎,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站陆馁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏合愈。R本人自食惡果不足惜叮贩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佛析。 院中可真熱鬧益老,春花似錦、人聲如沸寸莫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膘茎。三九已至桃纯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間披坏,已是汗流浹背态坦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棒拂,地道東北人伞梯。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像帚屉,于是被迫代替她去往敵國(guó)和親谜诫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)攻旦、插件喻旷、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 向晚渭河幽,月下驪山靜牢屋。誰(shuí)見(jiàn)真龍永在秦掰邢,空有千秋夢(mèng)。 陶土鑄雄兵伟阔,列陣始皇冢辣之。待戈征伐膽氣寒,笑傲忠魂影皱炉。
    塵寞閱讀 400評(píng)論 6 11
  • 2017年9月30號(hào)早上5:20分怀估,老爺子離開(kāi)了我們,享年81歲,他這一輩子過(guò)的好辛苦多搀,很不容易歧蕉,自己眼睛是先天性...
    心海菲雨閱讀 335評(píng)論 0 1
  • 我會(huì)過(guò)去,就像波斯羅馬一樣 鮮紅的頭顱將落在日出的東方 像那墓邊的艷薔薇般悲涼 幽靈會(huì)同你分享我的死骨肉 貪婪地吞...
    蒼穹橙子閱讀 230評(píng)論 0 4
  • 2016年9月康铭,今晚突然想寫(xiě)點(diǎn)文字來(lái)記錄一下我過(guò)去的這幾年的懵懵懂懂與渾渾噩噩
    小一只閱讀 70評(píng)論 0 0