tmtbe/swooledistributed

为了开发API服务器

3.7.4 2019-04-12 09:13 UTC

README

官网:http://sd.youwoxing.net 经过两年多的迭代,今年年底,这是SD框架硕果累累的一年。通过不断的迭代和改进,SD框架已经在圈内有良好的口碑,许多新框架借鉴了SD的设计思想,SD框架也被许多创业型公司和大型企业使用。

SDHelp

SDHELP是SD专属的开发者工具,可以实现断点调试,代码覆盖率报告等功能。 https://github.com/SwooleDistributed/SDHelper-Bin

SD框架到底是什么技术

SD框架全称SwooleDistributed,从名称上看一个是Swoole一个是Distributed,他是基于Swoole扩展的可以分布式部署的应用服务器框架。 借助于PHP的高效开发环境,Swoole的高性能异步网络通信引擎,以及其他的高可用的扩展和工具,SD框架提供给广大开发者一个稳定的高效的而且功能强大的应用服务器框架。

入门成本

坦白说,相比于目前流行的FPM框架,SD的入门成本相对较高,因为设计理念不同以及与传统PHP-FPM环境完全不同的运行环境,对于长时间使用LAMP(LANP)技术的开发人员来说会有一段时间的适应期。如果开发的应用简单,涉及的系统复杂度低,那么SD上手还是比较容易,根据简单的例子和文档几乎立即就能开启SD的探索之旅,但是如果开发的是复杂的应用,那么SD包含的众多组件还是需要你慢慢熟悉上手的。

SD框架到底包含哪些强大的功能呢

我们这里列举下SD提供的各种各样的功能以及模块组件

  • 混合协议 SD框架支持长连接协议TCP,WebSocket,短连接协议HTTP,以及UDP。 通过配置开放不同的端口开发者可以轻松管理不同的协议,并且可以共用一套业务代码,当然你可以通过智能路由进行代码的隔离。 长连接可以配置不同的数据传输协议,比如二进制协议文本协议等等,通过框架提供的封装器解包器接口可以自定义各种各种的协议封装,并且各种协议之间可以自动转换,比如你通过广播发送一个信息,该信息流向不同客户端,客户端间采用不同协议,那么框架会根据不同的端口自动转换不同的协议封装。 你也可以通过Http给所有长连接客户端发送推送消息,类似这种混合协议协作的业务在SD框架上会异常简单。
  • MVC以及智能路由 框架的设计是MVC架构,其中每一个层级都可以继续划分子层级,开发者可以将Controller继续分层通过不同文件夹进行管理,也可以将Model进行细分,划分为业务层和数据层,这都看开发者自身的系统设计。智能路由将处理解包器解包后的数据,负责将这些数据传递到Controller层。
  • 中间件 SD框架还提供了中间件,中间件可以对流入的数据进行处理,比如清理异常数据,修改数据,流量统计,搜集日志等功能。中间件可以设置多个,他们和端口进行绑定。
  • 对象池 SD框架内大多数的对象都使用了对象池技术,对象池技术有利于系统内存的稳定,减少GC的次数,提高系统的运行效率,事实证明对象池对系统稳定做出了极大的贡献,开发者也可以使用这一套对象池技术,增加对对象的复用,减少GC和NEW的频率,对系统毛刺现象和内存泄露方面都有很大的稳定性提升。
  • 异步客户端以及连接池 Mysql,Redis,Http客户端,Tcp客户端,等等其他更为复杂的客户端,在SD框架中均为异步的模式,异步解决了系统整体的并发能力,但异步客户端需要提供连接池维持,SD框架提供了连接池,开发者不需要自己管理连接池,只需要使用即可。
  • 协程 异步事件回调解决的是并发性能,但造成的是业务代码的混乱。SD框架提供了协程解决了这一问题,通过yield关键字提供对异步的同步写法,消除了业务书写上的大量回调嵌套,你可以通过yield+同步的写法实现异步的性能。 协程提供了一整套完整的体系,包括超时,异常,休眠,多路选择,以及创建用户协程等等功能。
  • 定时任务 顾名思义定时执行的任务。
  • 任务投递 支持将耗时任务投递到Task进程。
  • 自动Reload 可以开启框架的自动Reload功能,这样代码修改会被立即响应。

上面描述的都是一些基础功能,大家开发应用时经常用到的,那么下面则是一些高级功能。

  • 集群以及微服务 框架提供集群部署,通过开启集群开关,部署Consul工具服务器,我们就可以开启集群之旅,框架中消息功能都是支持集群环境的。通过暴露API,监听API,我们可以实现微服务,微服务中我们又提供了健康监控,熔断,超时,负载均衡,请求迁移等等功能。 集群采用的是对等网络,没有中间节点,没有单点隐患,设计理念如下图所示。 image

  • 订阅与发布 SD提供的订阅发布功能也是支持集群环境,并且它严格的按照MQTT所定义的订阅发布规范,并且实现了所有的功能。这恐怕是最好最优秀的订阅发布功能了。

  • 事件派发 跨进程跨服务器的事件派发功能,很多SD框架的基础设施都是基于这个搭建的。

  • 用户进程管理及进程间RPC SD框架对用户进程进行了重新封装,开发者可以启动自己的用户进程。用户进程可以是异步的,也可以是同步的,同时支持各种连接池和协程。用户进程用途广泛,框架同样支持用户进程与Worker进程之间的相互RPC调用。

  • 集群下的定时任务:通过Consul设置定时任务,并同步到集群所有服务器执行。集群服务器将选举出Leader,通过判断是否为Leader来决定任务是否执行。

  • Context上下文:在整个消息处理流程中被共享的上下文,非常实用和方便。

接下来介绍SD框架的特色组件。

  • 异步AMQP客户端及分布式任务系统:支持AMQP协议的异步客户端,可与RabbitMQ联动。通过框架提供的分布式任务组件,可搭建分布式任务系统。
  • 异步MQTT客户端:支持与MQTT服务的订阅与发布。
  • MQTT简易集群服务器:支持QOS0级别的简易MQTT服务器,支持集群部署。
  • 服务器监控系统:提供服务器监控后台,可监控集群,也可监控单台服务器的具体运行状况。以下是一些截图:

SD框架远不止如此。

SD框架一直在高速发展中,有更多开发者的参与,未来将更加美好。附上SD框架的文档及官网:官网 文档 GitHub 如果您喜欢,请给个星星支持一下~

高性能、高并发、PHP异步分布式框架,由ext-swoole驱动。

开发交流QQ群:569037921

简单的WebSocket案例

聊天室:https://github.com/tmtbe/SD-todpole

在线演示:http://114.55.253.83:8081/

官方网站:http://sd.youwoxing.net

开发文档:http://docs.youwoxing.net

教程视频:http://v.qq.com/boke/gplay/337c9b150064b5e5bcfe344f11a106c5_m0i000801b66cfv.html

安装

您可以通过composer进行安装。

自动加载必须指定apptest

{
  "require": {
    "tmtbe/swooledistributed":">2.0.0"
  },
 "autoload": {
    "psr-4": {
      "app\\": "src/app",
      "test\\": "src/test"
    }
  }
}

然后在安装根目录(vendor上级目录)中执行以下代码。

php vendor/tmtbe/swooledistributed/src/Install.php

服务器可以在安装完成后在bin目录中执行。

优势

1.高性能和高并发,异步事件驱动。

2.HttpClient、客户端、Mysql、Redis连接池。

3.定时任务系统。

4.协程支持。

5.使用对象池模式,优化内存分配和GC。

6.许多异步客户端,如MQTT、AMQP等。

7.支持集群部署。

8.用户进程管理。

9.支持多端口、多协议,自动协议转换。

10.基于Consul的微服务管理。

11.基于Consul的集群节点自动发现。

12.支持发布-订阅模式。

13.MQTT服务器。

14.异步操作系统。

架构图

类继承结构

image

进程结构

image

集群结构

image

捐赠

如果您喜欢这个项目,希望您能捐赠此项目,以便项目获得更好的发展,谢谢。

支付宝:

image