# 导言
[TOC]
* [用户案例](用户案例.md)
* [基于Swoole扩展分布式全栈开发框架](ji-yu-swoole-kuo-zhan-gao-xing-neng-gao-bing-fa-de-php-tong-xun-kuang-jia.md)
PHP是一种被广泛应用的开源脚本语言,绝大多数开发者使用PHP做基于Web的应用程序,并且有了很多非常知名的Web框架。
传统的PHP应用程序基本上是在Apache等Web容器中运行的,浏览器与Web容器采用HTTP协议通信,然而在很多实际项目中HTTP协议无法满足我们的需求,尤其是在服务端和客户端要保持长连接,做实时双向通讯时,HTTP协议显得力不从心。例如即时IM通讯,游戏服务器通讯,与硬件传感器通讯等等,开发这些应用程序我们无法直接使用nginx/apache + PHP来实现。
Swoole扩展的出现使我们重新定义的PHP,我们通过Swoole扩展可以几乎做我们想做的任何事情,如基于Websocket的服务器、游戏服务器、移动通讯服务器、智能家居服务端、物联网服务、web服务器、RPC服务器等等。几乎任何基于TCP/UDP通讯的服务端都可以用PHP来开发。Swoole扩展使得开发者摆脱PHP只能用于Web开发的束缚,向更广阔的前景发展。
但是强大的Swoole并不那么容易使用,他作为一个扩展来说无一例外是强大的,优异的性能,丰富的Api,如何更容易的使用Swoole带来的性能和新特性,框架就要出来解决这一矛盾。
SwooleDistributed框架采用了MVC结构,他的一些灵感来自于CI框架,你们在使用的过程中会发现不少CI的影子,这使得我们使用过CI的开发者更容易上手。并且框架针对swoole的api进行了再次封装,在保证高性能的同时提供了高效率开发。
## 支持投递任务
针对swoole提供的Task进行了再次封装,Controller,Model中调用Task只需要一句话。
Task是swoole扩展中task的封装,在SwooleDistributed可以非常方便的进行异步(同步)任务投递。
## 定时器
定时器更容易使用,只需要更改配置随心所遇的调用Model或者Task的Api。
## 协程
不再需要复杂难看的回调,通过yield简化客户端代码。
PS:swoole2.0开始提供了协程,但是支持的并不完整比如task就没有实现协程模式,稳定性也没有1.9.x的稳定,框架目前使用的还是1.9.x版本。
##托管同步异步
框架统一了同步与异步Redis/Mysql调用的API和返回格式,也就是说开发者不用自己选择使用同步还是异步,一切交给框架就行。
PS:这里带来的好处就是Task和Model的代码可以互相调用了。
## 单元测试
框架提供了一个类似PHPUNIT的单元测试模块。
## 连接池
异步Redis和异步Mysql的连接池不需要开发者维护,你们只需要使用就行。
SwooleDistributed借助Miner实现了Mysql的语法构建器。
Miner的用法:[Miner](https://github.com/jstayton/Miner)
另外SwooleDistributed率先支持异步Mysql事务。
## 支持分布式系统
SwooleDistributed搭载dispatch组件实现分布式部署,俩者均是可以集群部署无单点故障。
## 单服务多协议
SwooleDistributed服务器通过配置不同的端口,可以同时处理tcp和http请求,比如开放http api实现给所有tcp的客户端广播消息这种需求在SwooleDistributed中实现起来非常简单。tcp和http请求通过自定义路由器可以指向同一个controller,再通过设置tcp,http方法的前缀可以分离tcp和http的处理方法。
## 支持全局广播或者向任意客户端推送数据
SwooleDistributed提供非常方便的API,可以全局广播数据、可以向某个群体广播数据、也可以向某个特定客户端推送数据。配合定时任务,也可以定时推送数据。
## 支持模板引擎
SwooleDistributed的模板引擎采用了plates。
plates的文档:[plates](http://platesphp.com/)
## 高并发,高性能,低配置
SwooleDistributed使用了swoole的扩展,内部的controller和model采用了对象池的模式,对象重用性能强悍。
SwooleDistributed和dispatch实现了内网自动发现,集群部署零配置。
## 支持服务平滑重启
当需要重启服务时(例如发布版本),我们不希望正在处理用户请求的进程被立刻终止,更不希望重启的那一刻导致客户端通讯失败。框架提供了平滑重启功能,能够保障服务平滑升级,不影响客户端的使用。
## 支持文件更新检测及自动加载
在开发过程中,我们希望在我们改动代码后能够立刻生效,以便查看结果。框架提供了文件检测及自动加载组件,只要文件有更新,框架会自动运行reload,以便加载新的文件,使之生效。
# SD2概述
保留1.x版本所有功能的支持,2.x版本主要增加了对微服务化的支持,和协程性能的改善。
使用SD框架,无论是1.x用户还是2.x用户都可以轻松的将代码进行微服务化,需要改动的代码相当少,拆分Controller,理清服务间的依赖关系,就可以实现微服务化。
协程的性能在新版本上也有所提高,首先是qps直接提升了30%,其次是框架内部完全使用了对象池技术,减少了GC的次数内存占用率极小,除了压测暴涨的连接导致内存峰值外基本无明显波动。
SD间专用的RPC方案,tcpClient,HttpClient连接池技术等等崭新的模块超高的性能,让你的开发更加简单。
SD2将内部使用的连接池,协程,对象池等技术全部重新构建,分包更加清晰,模块间解耦使得可以独立使用,如果你想单独开发自己的框架又不想踩坑,那么可以使用这些模块包。
还有很多细小的功能,如支持Redis lua,框架会自动上传lua脚本,graylog的支持将日志数据发往graylog服务器,钉钉机器人的支持,用于告警系统的搭建,支持docker,mqtt异步客户端等等
总之,SD2是一个新的开始,它将探索微服务的美妙世界。
- Introduction
- SD 3.X文档连接
- 导言
- 用户案例
- 基于Swoole扩展分布式全栈开发框架
- 选择SD框架助力企业开发
- 捐赠SwooleDistributed项目
- 框架性能报告
- 更新日志
- VIP服务福利
- 安装与配置
- 【推荐】全自动安装部署
- 环境要求
- 使用Composer安装/更新SD框架
- 通过Docker安装
- 代码结构
- 启动命令
- 服务器配置
- 服务器基础配置server.php
- 客户端协议配置client.php
- business.php
- log.php
- 微服务及集群配置consul.php
- fileHeader.php
- mysql.php
- redis.php
- 定时任务配置timerTask.php
- 服务器端口配置ports.php
- catCache.php
- 验证服务启动成功
- 微服务-Consul
- 日志工具-GrayLog
- 集群-Cluster
- 内核优化
- 入门教学
- 开发流程
- 开发前必读
- 开发规范
- 基本流程
- 框架入口
- Model数据模型
- Controller控制器
- 协程
- 协程基础
- 迭代器
- 调度器
- 使用协程的优势
- 通过协程的方法屏蔽异步同步的区别
- Select多路选择器
- 协程Sleep
- 通用协程方法
- 设置超时
- 设置无异常
- 设置降级函数
- initAsynPools
- dump
- 封装器与路由器
- 封装器
- sendToUid
- 路由器
- sendToUids
- 对象池
- 扩展组件
- 中间件
- Redis使用介绍
- RedisAsynPool
- Redis具体使用
- sendToAll
- RedisRoute
- Redis+Lua
- Mysql使用介绍
- MysqlAsynPool
- Mysql返回值
- 如何获取构建的mysql语句
- 如何执行一个SQL
- 如何执行事务
- stopTask
- Mysql具体使用
- 异步客户端
- Loader
- MqttClient
- model
- SdTcpRpcPool
- task
- HttpClientPool
- view
- TcpClientPool
- AMQP
- initialization
- Memory
- destory
- Cache
- Lock
- Pool
- EventDispatcher
- Process
- Cluster
- TimerTask
- Reload
- Consul
- Context
- 自定义进程
- 进程间RPC
- $http_input
- CatCache
- $http_output
- TimerCallBack
- 专题
- HTTP专栏
- TCP专栏
- 基础知识
- WebSocket专栏
- 微服务
- Consul配置
- RPC
- REST
- AMQP异步任务系统
- MQTT简易服务器
- Docker化以及资源编排
- 快速搭建公司内部统一的开发环境
- 使用HTTPS/WSS
- 订阅/发布
- 游戏专题
- 类介绍
- AppServer
- clearState
- onOpenServiceInitialization
- SwooleDistributedServer
- get_instance
- kickUid
- bindUid
- unBindUid
- coroutineUidIsOnline
- coroutineCountOnline
- setTemplateEngine
- isWebSocket
- isTaskWorker
- getSocketName
- initAsynPools
- addAsynPool
- getAsynPool
- getServerAllTaskMessage
- Controller
- onExceptionHandle
- send
- sendToUid
- sendToUids
- sendToAll
- sendToGroup
- close
- getContext
- defaultMethod
- $redis_pool
- $mysql_pool
- $request_type
- $fd
- $uid
- $client_data
- $request
- $response
- $loader
- $logger
- $server
- $config
- Model
- initialization
- destory
- View
- Task
- stopTask
- HttpInput
- postGet
- post
- get
- getPost
- getAllPostGet
- getAllHeader
- getRawContent
- cookie
- getRequestHeader
- server信息
- getRequestMethod
- getRequestUri
- getPathInfo
- HttpOutput
- setStatusHeader
- setContentType
- setHeader
- end
- setCookie
- endFile
- 单元测试