赞
踩
用swift写服务器的已经不是什么新鲜事了,这几年的发展,也是swift在服务端的表现越来越成熟,目前比较流行服务端框架主要有Vapor、Perfect、Kitura和Zewo,他们各有长短,本人这次主要是使用Perfect来写的,因为Perfect的功能比较完善,在GitHub上具有1W+的星,而且有一个非常重要的原因是,Perfect有中文文档。
Perfect 包括了您所期待的所有基本功能,包括路由、websockets 基于 HTTP 的网络套接字、TLS(SSL)通信加密、Mustache 模板和 Markdown 模板、JSON 结构化数据等等,以及全部其他所有 Swift 后台框架加在一起才有的 XML 结构化数据、苹果推送消息 APNS、MqTT 消息队列和 SMTP 邮件发送,甚至大数据也支持。Perfect 的数据库支持非常广泛,其原生 SQL 驱动包括 MySQL、SQLite、PostgreSQL 和 MariaDB,还支持 MongoDB、Redis、CouchDB 甚至还包括 FileMaker(苹果自己的数据库 Swift 都不支持,Perfect 反过来支持——译者注)。Perfect 据说还部分支持微软的 ODBC,即多种数据库的底层兼容界面——有点像 ORM,但是以 C 函数库为基础。提到 ORM 数据库对象关系自动化管理,Perfect 有 StORM 并完整实现了 PostgreSQL、MySQL、CouchDB 和 SQLite。
经过对Perfect框架一周的学习,基本可以开启服务,该踩的坑也踩的差不多了,然后打算用Perfect写一个后台,希望可以上线使用。
本篇主要介绍使用Perfect开启第一个服务,后续还会持续更新。对于环境配置这里就不多介绍了,Perfect官方文档和GitHub上都有。这里是使用MacOS系统和Xcode进行开发的
废话不多说,现在开始创建我们swift服务器,先使用swift的SPM(Swift Package Manager)创建和管理我们的工程
先创建一个空文件夹,然后使用终端创建我们的框架管理工程,如果你是iOS开发工程师,你可以把它看做cocoapods
swift package init
swift package generate-xcodeproj
编辑完成以后,使用命令
swift build
swift package init --type executable
还有,就是在Package.swift文件中不需要添加任何git地址,因为已经有一个工程帮助管理了。
workspace的创建:
打开Xcode,然后File->New->Workspace
这样就创建出了一个空的workspace,然后添加工程
添加完需要的工程后,需要给我们的项目工程做配置,让它与框架工程关联,可以使其引用需要的模块
然后,我们可以开始写代码啦。
首先,我先建了一个server类和一个接口类以及一个管理接口的文件
在server类中,配置我们的服务
import PerfectHTTPServer
import PerfectHTTP
import PerfectLib
class CXServer {
let server = HTTPServer()
// static let shareServer = CXServer()
init() {
setupServer()
}
private func setupServer() {
server.serverPort = 8080
server.serverName = "localhost"
server.documentRoot = "./webroot"
}
func configRoutes(_ routes: [Routes]) {
for route in routes {
server.addRoutes(route)
}
}
//MARK: - 启动服务
func startServer() {
do {
// Launch the servers based on the configuration data.
//try HTTPServer.launch(configurationData: confData)
try server.start()
} catch {
fatalError("\(error)") // fatal error launching one of the servers
}
}
}
在testRoute中的代码
import PerfectHTTP
class TestRoute {
var testRoute = Routes()
init() {
testRoute.add(method: .get, uri: "/") { (request, response) in
response.setHeader(.contentType, value: "text/html")
response.appendBody(string: "<html><title>Hello, world!</title><body>Hello, world!</body></html>")
response.completed()
}
}
}<span style="color:#ffffff;">
</span>
接口管理文件中的代码
let test = TestRoute().testRoute
在程序入口main文件中开启服务
let server = CXServer()
server.configRoutes([test])
server.startServer()
然后运行,这样,我们的第一个服务就开启了,可以在网页中输入http://0.0.0.0:8080/试试,效果如下
大家可以有空尝试一下,说不定swift真会火到和JAVA一样
项目地址:https://github.com/NickQCX/ServerOfPerfect
参考:
http://geek.csdn.net/news/detail/191056#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1
https://swift.org/package-manager/#conceptual-overview
https://github.com/PerfectlySoft/Perfect
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。