原文:Hello Server Side Swift

作者:Logan Wright

译者:CocoaChina--kmyhy(博客)

自从苹果官方发布了一个 Swift 的 Linux 开源版本之后,服务端 Swift 终于迎来了一个令人激动的前景。我的好奇心终于无法克制,是时候尝试一下服务端 Swift 了!

除了用过几个 Baas 以外,我没有任何后端编程经验,但幸运的是开源社区已经提供了现成的框架。我试了一下Tanner Nelson推荐的Vapor框架。它的使用非常简单,非常适合我当前的任务,在这篇文档中还会使用到 Heroku。我决定使用 Heroku 的原因是我们的后端团队在使用它,它对于前端来说非常友好。

写到这里的时候,为了解决 Heroku 框架运行中的几个小问题,我专门提交了一个pull request。如果代码还没被合并的话,请设置你的包管理器从这里下载。

安装

要继续本教程,首先,你需要一个Heroku 账号,并安装好Swift Development Snapshot。写到这里的时候,在它的正式版中还未包含 swift 包管理器。因此为了使用这个工具,你必须下载开发版的 snapshot。

开始

我们的目标是创建一个简单的 Swift 服务器并运行在 Heroku 上。这不需要在 linux 环境下进行,就像是你在使用本地服务器。你只消创建一个本地的 Xcode 项目,对项目进行一些设置,然后就可以在Swift 包管理器中运行它。整过过程分为 4 个步骤:

将 main.swift 拷贝根目录下的 Sources 目录

创建一个 Package.swift 文件

将 .build 目录添加到 import paths

要使用自动补全和语法加亮功能,需要将 Swift 包管理器的 build 目录提交到 import paths 中。注意,在 import paths 的 Debug 中设置的 debug 目录,而 Release 项则输入 release 目录。

用 toolchain 运行 Xcode

如果你使用 Xcode 7.3,你可以用 Xcode > Toolchains 菜单开启一个Xcode 实例,用于打开 swift snapshot。因为我们不能在 Xcode 中进行编译,我们只能以命令行的方式进行编译。

编写服务器

令我高兴的是,为了进行概念验证,我需要编写的代码其实只有寥寥数行。我启动和运行服务器的代码甚至不到 10 行。

要启动服务器,只需在终端中输入一句命令,:

好了,让我们打开浏览器。我的浏览器安装了 json 插件,你的画面或许会有不同。

迁移到云上

服务器在本地顺利运行起来了,但如果放到云端则更好。我迫不及待地想将 App 在云上跑起来。对于我来说这是一个全新的挑战,幸运的是,我得到了Vincent Toms的悉心指导。

Heroku 的安装是一件非常愉悦的体验,几分钟后我就创建了一个 Heroku App,接下来我就要上传我的项目了。

出错啦

这只是今天的诸多错误中的一个。我已经预计到事情不可能一帆风顺,因此我查看了 Vapor 的文档,最终发现问题出在所谓的buildpacks上。Heorku 提供了一些标准的 buildpacks,但完全没有针对 Swift 的 buildpacks。无奈之下求救于开源社区,刚好看到Kyle Fuller 的 buildpack。集成它就简单得多了。

用这个 buildpack 启动后,App 成功加载,接下来就是访问它的 URL。

再次出错

事情不会那么顺利的,是吧?经过 google 一番,仔细查看了一些例子,我发现我还差一个 procfile。浏览一下这个文件的内容,你就能明白这个文件是干什么用的了。

buildpack 创建了可执行文件,但 Heroku 并不知道。通过 procfile,我们告诉 Heroku 去运行 SwiftServerIO 可执行文件。上传这个 procfile。

仍然出错

Heroku 编译的 2 分支仿佛变得无比漫长。我重新打开了浏览器,发现仍然报错。

我以为 Heroku 可能还未启动完成(实际不是),因此我又等了一小会,终于发现出错了。可执行文件生成了, process file 也就绪,一定是别的什么地方出问题了。再次 google,一直到我最终发现我需要设置 App 的规模(scale up)。这要使用到 Heroku 的 toolbelt 中的一个简单命令。

heroku ps:scale web=1

Heroku 在免费情况下只有一个 dyno(Heroku 计费单位,10~50 个请求/秒)。但对于我们的简单服务器来说,这也够了。因此,在我们将 scale web 设置为 1 个 dyno 之后,再次用浏览器查看。

成功了!

成功了!服务器启动,出现了万能的 hello world!经过一番欢呼雀跃之后,让我们真正来问一声好吧!

响应请求

在 main.swfit 文件中添加一小段代码,让服务器在问好的同时能够因人而异。就微微偷一下懒,新加一个路由,让服务器根据输入输出不同的问候语。

一切正常,但根据一般规律,我仍然做好了出错的心理准备。提交修改,push 代码到 Heroku。

Say Hello!

大约一份多钟的编译之后,在浏览器中访问 URL,服务器返回了问候语。你可以在这里查看效果。

接下来是什么?

可以说,服务端 Swift 的今天离不开社区强大支持。对于我来说,能够从云端获取 JSON 是一个令人兴奋的开始,我已经迫不及待地想看看接下来还会发生什么。

当然在此之前,我不得不和我在Intrepid Pursuits的同事们一起,继续编写一个有一个 iOS App。如果你想了解我的最新动态,请在访问我的Github或者Twitter。

服务端 Swift

附言

在这里下载源代码。

在Journal文件夹中,是 step-by-step 指南。

Hello,服务端 Swift的更多相关文章

  1. 如何将 Parse 服务器迁移到 Heroku 或 AWS

    然而,Parse已在一月份关闭,官方建议,在2017年1月28日彻底停止服务之前,请迁移Parse应用。在本节教程里,我们会讲述如何将parse-server部署到Salesforce旗下知名的云服务供应商Heroku。部署到Heroku有两种方法可供选择。接下来,部署Heroku。将Parse服务器部署到Heroku首先在电脑上安装Heroku工具条,从链接中可以找到官方安装指南。你的parse-server已经成功地部署到了Heroku。这个变量表示parse在Heroku服务器上的地址。

  2. Hello,服务端 Swift

    我的好奇心终于无法克制,是时候尝试一下服务端Swift了!我决定使用Heroku的原因是我们的后端团队在使用它,它对于前端来说非常友好。安装要继续本教程,首先,你需要一个Heroku账号,并安装好SwiftDevelopmentSnapshot。开始我们的目标是创建一个简单的Swift服务器并运行在Heroku上。Heorku提供了一些标准的buildpacks,但完全没有针对Swift的buildpacks。通过procfile,我们告诉Heroku去运行SwiftServerIO可执行文件。可以说,服

  3. 令世人惊叹的服务器端 Swift!

    接下来我们将会聊一聊这些框架的优缺点,并且介绍如何入门服务器端Swift开发。(其中的几个框架仅支持Swift3!我打算以一个旁观者的角度来讨论服务端Swift开发,比较各个框架以及服务端Swift开发所处的位置。应用程序,接着通过现场编码演示如何部署服务端Swift开发环境,编写一个“Hello,World!”随着12月份Swift正式开源,开发者已经开始尝试服务端开发,使用Swift构建web应用程序。不难看出服务端Swift开发极具潜力。他们的目标是将Swift做的和Rails一样。

  4. 教你在heroku云平台上部署Node.js应用

    heroku是构建在AWS之上的一个PaaS云平台,现在支持Ruby, Node.js, Python, Java, 和 PHP,代码的部署是通过git进行,编译和运行都是自动的。

  5. React内存使用情况部署到Heroku

    我最近完成了一个MERN堆栈web应用程序,并试图将其部署到Heroku上。它看起来像是已部署的,但当我尝试登录或创建用户时,它显示404未找到/grapql。当运行heroku日志-tails时,它在发布后表示,应用程序由于内存使用超过配额而崩溃。所以我在本地运行它,并使用DevTools查看内存使用情况。我目前正在尝试重构搜索到的内容,并使用react.llazy只显示用户的观点。

  6. windows – Heroku:’https://git.heroku.com’的用户名:git

    我正在尝试检查heroku上的git远程:这个错误在heroku文档中引用,在上面的屏幕截图中显示为https://devcenter.heroku.com/articles/git,但我不知道接下来要做什么来解决这个问题.这对我有用.$herokuauth:token出现提示时,将结果用作密码.

  7. 无法检测到set buildpack https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/php.tgz

    我是否需要在Heroku网站上进行其他设置?注意我在这里发现了一些像这样的帖子:Pushrejected,failedtodetectsetbuildpackheroku/php我看了一下它,但这与我的情况不太相关.您似乎正在尝试将静态网站部署到Heroku,但指定了期望的heroku/PHPbuilpack,以及……一个程序.两种可能的方法:满足heroku/PHPwebpack的requirements:>有一些PHP代码.例如,带有重定向的index.PHP文件,如:>有一个composer.jso

  8. 在Heroku Cedar(PHP)上部署新的遗物

    有没有人成功地将NewRelic插件部署到在HerokuCedar堆栈上运行的PHP应用程序?

  9. Heroku不会将我的Laravel应用程序识别为PHP应用程序,也不会进行作曲家安装

    我正在尝试在Heroku上发布我的Laravel应用程序.我从.gitignore中排除了composer.lock文件,并创建了一个包含的procfile我创建了我的应用程序然后我得到以下输出:如果我浏览到我的应用程序,但是我收到应用程序错误.当我查看我的日志时,它说我怀疑,不知何故,Heroku没有做作曲家安装,因为它不在我的git输出中,也许它甚至没有认识到我的应用程序是一个程序?可以肯定的是,我还在root中包含了一个空的index.PHP文件.没有帮助.我在这里错过了什么?

  10. 使用Heroku配置vars与PHP?

    我已经能够找到有关如何在Heroku中使用Python,node.js和其他一些语言的配置变量的信息,但不能用于PHP.你可以用PHP使用它们,还是不支持?Thisarticle显示了如何使用Python,Java和Ruby,而不是PHP.英雄上的配置变量将自身显示为环境变量,因此您应该能够像PHP中的任何其他环境变量一样从PHP访问它们.使用getenv.首先,从您的控制台设置变量:然后,从您的代码访问它:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部