尝试Swift服务器框架 - Perfect

为什么选择的是Perfect?

最近在关注Swift的服务器框架,其中主流框架前三分别是:

  • Perfect star:8978
  • Vapor star:6919
  • IBM-Swift/Kitura strar:4630

Vapor是借鉴Laravel框架的,如果你之前是试用Laravel框架做开发,那么使用Vapor更容易一些。

IBM的Kitura,是一个Express.js 风格的框架,知乎上有关于它的讨论如何评价IBM云平台支持苹果Swift,以及推出swift语言的web框架Kitura?

但我为什么选择使用Perfect呢?主要是因为有人对这几个框架以及Node.js做了对比,Perfect各项表现非常优异,所以选择了这个框架。具体对比数据可以看这篇文章:不服跑个分 - 顶级 Swift 服务端框架对决 Node.js

尝试Swift服务器框架 - Perfect_第1张图片
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,还需要执行下面命令安装OpenSSL,libssl-dev, uuid-dev

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

你可以使用Perfect的PerfectTemplate工程开始学习

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

进去发现,卧槽!没有.xcodeproj文件,这要怎么运行呢???
其实Apple提供了一个package工具,swift的包管理工具(暂时不支持iOS,watchOS和tvOS),不需要下载,swift里已经自带了。有时间推荐研究一下。
github地址: https://github.com/apple/swift-package-manager

进到PerfectTemplate目录下运行下面命令

swift build

等待链接一堆git的仓库之后,运行下面命令

.build/debug/PerfectTemplate

你就可以看到输出

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

访问http://localhost:8181/ 就可以看到输出了Hello, world!

经过上面的步骤,就已经成功搭建了一个本地的Swift服务器了。但是,总不能让我写代码时候一个一个.swift写代码吧,作为苹果自己的东西,怎么也得支持Xcode吧,要不然我怎么开心的coding呢。
放心,苹果当然提供了这样的功能,还是使用刚才那个swift-package-manager。运行:

swift package generate-xcodeproj

这是会自动生成一个PerfectTemplate.xcodeproj,打开点击Run就可以了。

如果你遇到了Perfect 2.0 -lCOpenSSL link error的错误
可以在PROJECT -> Build Setting -> Library Search Paths 中添加$(PROJECT_DIR) 并设置为Recursive

搭建自己的工程

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

搭建自己的工程很简单,主要还是依赖苹果的swift-package-manager,而这个工具主要是依赖Package.swift文件,作用跟cocoapodsPodfile类似。

mkdir MyAwesomeProject
cd MyAwesomeProject
touch Package.swift // 创建
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现在版本是2.x的版本,所以majorVersion是2。
然后运行下面命令,创建一个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: "Hello, world!Hello, world!")
        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/ 就可以看到输出的结果了。

到这里,基本的工程配置就完成了,之后我会讲一下我的工程做的一些模块选型,主要是模版模块和orm模块,以及他们的组装。谢谢~!

参考文章

Perfect 官网
Perfact-github
Swift
Swift-github
swift-package-manager
令世人惊叹的服务器端 Swift!

你可能感兴趣的:(尝试Swift服务器框架 - Perfect)