Slimane服务器端Swift

这是我在Medium上的第一个帖子。

什么是Slimane?

一个明确的启发性的Swift3微型框架和HTTP服务器。 https://github.com/noppoMan/Slimane

在对其进行介绍之前,我可以花一点时间讲讲故事为什么开始吗?

首先,在我的工程生涯中,我将大部分时间用于基础架构,后端,数据分析和Web开发。 所以我对Swift(尤其是iOS和Cocoa)的经验不足。 但是在2015年3月,我有机会为LifeClips(类似Blogging平台的中型平台)构建了一个iOS应用,然后我第一次使用Swift。 很快,我就爱上了Swift语法,例如强大的类型系统和足以与LL进行比较的灵活性。

迅速成为OSS

时间流逝…终于在2015年12月成为开源。然后我想我应该做点什么,那就是Slimane。

首先,这只是我的业余爱好。 尽管是业余爱好,但我每天都在做很多现代Web系统所需的功能/模块,有一天我意识到它可以在实际的Project中使用…(我正在等待Swift3发布)

特征

  • 100%与事件循环后端(libuv)异步
  • 独立的HTTP服务器
  • 快点
  • 模块化的
  • 完全托管的异步流,TCP,管道,文件系统,进程,计时器等。
  • 采用开放式快速

可用的中间件和模块

  • WS :Websoket服务器/客户端
  • 衣架 :异步HTTP客户端
  • 画眉 :轻量级的承诺实现
  • QWFuture :将来通过uv_queue_work实现
  • 会话 :SessionMiddleware在Slimane应用中启用会话。
  • Redis :用于会话的Redis客户端和Redis存储
  • BodyParser :用于在HTTP请求的主体中解析JSON和formData。
  • TemplateEngine:小胡子和javascript模板

还有更多…https://github.com/slimane-swift

入门

目的是建立一个快速的服务器并尝试使用一些示例。 不用担心,您无需编写任何代码。 试试看!

安装

按照安装指南设置机器。

https://github.com/noppoMan/Slimane/wiki/Install-Guide

生成并启动服务器和应用程序

cd / path / to / your / slimane-example

进行调试

.build / debug / SlimaneExample

终端说,服务器监听0.0.0.0:3000。 到目前为止,情况看起来不错,但让我们在浏览器中进行检查。

似乎工作正常!

再试试!

sliman-example包含一些实用示例,这些示例可以使Web应用程序具有许多模块。 我从中挑选了一些有趣的示例,并在下面进行介绍。

与Websocket聊天的应用程序

该服务器在本地计算机上运行,​​但是如果Redis Client支持Pub / Sub,我们可以在服务器与服务器之间广播数据包。 我也在考虑使用Slimane实现Socket.io后端。

使用阻止API

当前,我们的项目还没有任何Mysql Client。 不用担心,我们可以在Swift中使用某些oss,例如Zewo / Mysql,novi / swift-mysql等。

封锁API的问题

但是应该有一个问题。 由于依赖于libmysqlclient…,几乎Mysql客户端具有阻塞的api。 这意味着在等待操作时事件循环被阻塞。 因此,这意味着我们应该从头开始?

不!!

鹅口疮

我们可以避免使用QWFuture进行阻止。 如您所知,它是uv_queue_work的包装,带有Future语法。 可以将其与Thrush(Promise)结合使用以构成现代异步流程。

在关闭QWFuture 时,它是在单独的线程中执行的,并且不会被阻塞。 当任务完成或抛出错误时,将调用future.onSuccess或future.onFailure。

多进程环境上的集群模式

Slimane的单个实例在单个线程中运行。 为了利用多核系统,用户有时会希望启动Slimane进程集群来处理负载。

那些怎么样 Slimane具有更多功能来构建Web应用程序,例如Session / Cookie,JSON,Rest api服务器等。

现在怎么办?

实际上,用Swift编写服务器端代码非常有趣,它可能成为Web开发的下一个主流。 因此,我相信Slimane不会成为主要的框架工作,但它应该具有重要意义,可以告诉人们服务器端swift的工作方式,这真有趣。

无论如何,我一直在独自制作Slimane …所以我想为此建立一个社区。 因此,如果您对Slimane感兴趣,请与我联系(yuki@miketokyo.com)。