服務端Swift - Vapor2.0介紹

Get started with Vapor 2 at [docs.vapor.codes](https://user-gold-cdn.xitu.io/2017/5/31/f1121a99d68c5429cf04d811b9640411)

近日,在Medium上看到Vapor出了2.0版本,而且出了新的文檔,新的網站。因而忍不住試了一下,而且此次打算不在本地測試,想在Ubuntu系統上嘗試。javascript

Intro

經過學習這篇文章,你將學習到:java

  • 在阿里雲和騰訊雲上搭載Ubuntu雲服務器
  • 在Ubuntu上配置Vapor2.0以及Swift3.1運行環境
  • 瞭解編譯Vapor2.0工程的速度
  • 掌握如何編寫簡單的JSON數據返回API

Get Start

阿里雲、騰訊雲搭載Ubuntu服務器端系統

由於絕大部分公司是不可能會用蘋果系統來做服務器的,考慮到實用性,此次使用雲服務器來運行咱們的服務端Swift代碼。恰好做爲學生可以以廉價買阿里雲和騰訊雲服務器,因此下手測試了兩家雲端服務器。git


騰訊雲服務器CVM
阿里雲服務器ECS
因爲Swift暫時只支持Ubuntu運行環境,因此雲服務器系統咱們選擇安裝Ubuntu16.04 64位版本,請肯定安裝正確的系統。json

性能比較

對比兩種服務器,阿里雲的速度慢騰訊雲可不止一兩倍,並且,搞了好久,阿里雲打開不了80窗口,這樣咱們的服務端代碼就起不了做用了,親測騰訊雲成功運行。ubuntu

配置Vapor2.0以及Swift3.1運行環境

經過ssh來登陸咱們的服務器

ssh [name]@公網iP而後輸入密碼便可登陸。name爲管理員名,或者你也能夠在騰訊雲管理中心遠程鏈接服務器。swift

運行腳本

eval "$(curl -sL https://apt.vapor.sh)"vim

安裝Vapor

sudo apt-get install swift vapor安裝Vapor2.0。
須要注意的是,這兩行指令已經默認給咱們配置了Swift3.1的環境,咱們不須要手動下載Swift3.1,很是方便。api

最後

經過一行指令再次確認Vapor2.0是否安裝成功
eval "$(curl -sL check.vapor.sh)"瀏覽器

若是安裝成功,你會看到如下的效果

Success

新建一個Vapor工程

經過一行命令新建一個工程
vapor new HelloWorld服務器


第一次新建的時候,你可能會看到

image.png

是由於咱們尚未設置咱們的Git郵箱和名稱,經過執行如下兩行命令便可修復錯誤。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
這時候咱們能夠從新新建一個工程 vapor new [name]


cd到咱們的工程文件中,運行vapor build

可怕的等待

而後就看雲服務器的造詣了,在前面的文章裏面,我寫過一篇在蘋果系統本地測試咱們的Vapor,當我運行 vapor build大約都要等個5到10分鐘。在阿里雲測試咱們的Vapor時,我大約也要等10來分鐘,可是騰訊雲我測試大約要3分鐘,速度明顯差別。

成功編譯

成功編譯

Vapor目錄結構

Hello
├── Config
│   ├── app.json
│   ├── crypto.json
│   ├── droplet.json
│   ├── fluent.json
│   └── server.json
├── Package.pins
├── Package.swift
├── Public
├── README.md
├── Sources
│   ├── App
│   │   ├── Config+Setup.swift
│   │   ├── Controllers
│   │   │   └── PostController.swift
│   │   ├── Droplet+Setup.swift
│   │   ├── Models
│   │   │   └── Post.swift
│   │   └── Routes.swift
│   └── Run
│       └── main.swift
├── Tests
│   ├── AppTests
│   │   ├── PostControllerTests.swift
│   │   ├── RouteTests.swift
│   │   └── Utilities.swift
│   └── LinuxMain.swift
├── circle.yml
└── license複製代碼

須要注意的是,Vapor2.0的文件結構和Vapor1稍有差異,確實是Less Code,More Power.
cd Sources/Appcd 到App目錄下
運行vim Routes.swift查看該文件代碼,咱們能夠發現

import Vapor

final class Routes: RouteCollection {
    func build(_ builder: RouteBuilder) throws {
        builder.get("hello") { req in
            var json = JSON()
            try json.set("hello", "world")
            return json
        }

        builder.get("plaintext") { req in
            return "Hello, world!"
        }

        // response to requests to /info domain
        // with a description of the request
        builder.get("info") { req in
            return req.description
        }

       builder.get("*") { req in return req.description }

        try builder.resource("posts", PostController.self)
    }
}

/// Since Routes doesn't depend on anything
/// to be initialized, we can conform it to EmptyInitializable
///
/// This will allow it to be passed by type.
extension Routes: EmptyInitializable { }複製代碼

對比上個版本,確實是簡潔了不少。
補充:退出vim Routes.swift命令能夠按Shift健+Q再輸入wq!退出來。

最後,Run Server

先cd回工程根目錄下,並執行
vapor run serve

vapor run serve

測試API數據返回

在瀏覽器上輸入
[你的雲服務器公網IP]:8080/hello

哇哈哈,成功啦

Vapor 2:Less code, more power.

Vapor2添加了不少新的庫

Some of the new features in Vapor 2.

相比Vapor1.5,快速大概3倍,並且比PHP,Ruby快近乎100倍

Vapor 2 is 3x faster than Vapor 1 for plaintext responses.


寫在最後

本次是Vapor2.0的開篇,你們能夠上Vapor2.0新文檔查看新版介紹。日後會詳細講Vapor2的功能介紹和應用,喜歡請給紅心,也是對個人鼓勵。

Write the code, change the world.

相關文章
相關標籤/搜索