总而言之就是用Swift写服务端接口
安装Vapor
curl -sL toolbox.vapor.sh | bash
创建项目
vapor new Hello --template=light
--template=light
意思是使用light-template
模板,如果不指定模板的话默认使用base-template
模板
下载依赖并编译项目
vapor build
50多M的包,好久...
配置服务器
创建Config
文件夹,新建servers.json
文件, 指定host地址和端口号
{
"http": {
"host": "0.0.0.0",
"port": 8000
}
}
0.0.0.0 和 127.0.0.1 都表示本机,使用 0.0.0.0 的原因是,一个机器可能有多个 IP 地址,0.0.0.0 表示监听每个 IP 8000 端口收到的请求。
127.0.0.1 则表示只接受本机发给本机的请求,从网络上其他电脑发过来的请求,不论是请求的哪个 IP,都是不被处理的。
打包成一个XCode项目
vapor xcode -y
这样子打包之后就会自动打开了
启动服务器
vapor run
或者在XCodey运行
看到了控制台输出了
No command supplied, defaulting to serve...
No preparations.
Server 'http' starting at 0.0.0.0:8000
就可以了
如果说什么Can not bind to xxxx
就应该是端口占用的问题,可以用lsof -i tcp:端口号
和 kill -9 进程号
解决这个问题
如果你在浏览器输入http://localhost:8000
可以看到以下信息就证明服务器启动成功了
Request
- GET / HTTP/1.1
- Headers:
Host: 0.0.0.0:8000
Upgrade-Insecure-Requests: 1
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
Accept-Encoding: gzip, deflate, sdch
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- Body:
会出现这串东西是因为他执行了Sources/App/main.swift
的内容,把请求体返回回来.
修改Sources/App/main.swift
把文件改成这样子
import Vapor
let drop = Droplet()
drop.get { _ in
return try JSON(node: [
"message":"Hello Vapor"
])
}
drop.get("Hello","There") { request in
return try JSON (node:[
"message":"Hello There"
])
}
drop.get("TEST") { request in
return try JSON (node:[
"message":"Hello Test"
])
}
drop.run()
然后我们使用Postman测试一下三个地址
http://localhost:8000/
http://localhost:8000/Hello/There
http://localhost:8000/TEST
接下来试试接受参数并返回
继续在drop.run()
上面补充
drop.post("post") { request in
guard let name = request.data["name"]?.string else {
throw Abort.badRequest
}
return try JSON(node: [
"name": "Hello \(name)!"
])
}
guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。
判断如果没有接收到'name'参数的话就会抛出异常Invalid request
,有的话就返回Hello
+ 参数值 + !
测试一下
WX20170316-110133@2x.png为什么要用Swift写服务器?
额,看了一下资料,也没发现有谁说这东西有什么特别突出的优点,不过没试过,觉得挺新鲜,就试试嘛.
学习资料 :
服务端 Swift - Vapor 篇 (一)
用 Swift 的框架 Vapor 写服务器这事儿怎么样?
网友评论