为什么选择的是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
配置
官方原版资料: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
文件,作用跟cocoapods
的Podfile
类似。
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!