This repository has been archived by the owner on Sep 1, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 64
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
602 changed files
with
16,738 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.idea | ||
/*.json | ||
README_RAW.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#入门指引 | ||
|
||
Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。 | ||
|
||
* 新手入门教程:[https://github.com/LinkedDestiny/swoole-doc](https://github.com/LinkedDestiny/swoole-doc) | ||
|
||
Swoole要求使用者必须具备一定的Linux/Unix环境编程基础,[《学习Swoole需要掌握哪些基础知识》](/wiki/page/487.html) 本文列出了基础知识清单。 | ||
|
||
swoole_server | ||
---- | ||
强大的TCP/UDP Server框架,多线程,EventLoop,事件驱动,异步,Worker进程组,Task异步任务,毫秒定时器,SSL/TLS隧道加密。 | ||
|
||
* `swoole_http_server`是`swoole_server`的子类,内置了Http的支持 | ||
* `swoole_websocket_server`是`swoole_http_server`的子类,内置了WebSocket的支持 | ||
* `swoole_redis_server`是`swoole_server`的子类,内置了Redis服务器端协议的支持 | ||
|
||
> 子类可以调用父类的所有方法和属性 | ||
swoole_client | ||
----- | ||
`TCP/UDP/UnixSocket`客户端,支持`IPv4/IPv6`,支持`SSL/TLS`隧道加密,支持`SSL`双向证书,支持同步并发调用,支持异步事件驱动编程。 | ||
|
||
swoole_event | ||
---- | ||
EventLoop API,让用户可以直接操作底层的事件循环,将socket,stream,管道等Linux文件加入到事件循环中。 | ||
|
||
> eventloop接口仅可用于socket类型的文件描述符,不能用于磁盘文件读写 | ||
swoole_async | ||
---- | ||
异步IO接口,提供了 异步文件系统IO,定时器,异步DNS查询,异步MySQL等API,异步Http客户端,异步Redis客户端。 | ||
|
||
* swoole_timer 异步毫秒定时器,可以实现间隔时间或一次性的定时任务 | ||
* swoole_async_read/swoole_async_write 文件系统操作的异步接口 | ||
|
||
swoole_process | ||
---- | ||
进程管理模块,可以方便的创建子进程,进程间通信,进程管理。 | ||
|
||
swoole_buffer | ||
---- | ||
强大的内存区管理工具,像C一样进行指针计算,又无需关心内存的申请和释放,而且不用担心内存越界,底层全部做好了。 | ||
|
||
swoole_table | ||
----- | ||
基于共享内存和自旋锁实现的超高性能内存表。彻底解决线程,进程间数据共享,加锁同步等问题。 | ||
|
||
> swoole_table的性能可以达到单线程每秒读写100W次 | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#环境依赖 | ||
|
||
* 仅支持 `Linux`、`FreeBSD`、`MacOS` 三种操作系统 | ||
* 在`Windows`平台,可使用`CygWin`或`WSL(Windows Subsystem for Linux)` | ||
* `Linux` 内核版本 `2.3.32` 以上 | ||
* `gcc4.4` 以上版本或者`clang` | ||
* 编译为 `libswoole.so` 作为 `C/C++` 库时需要使用 `cmake-2.4` 或更高版本 | ||
|
||
> 建议使用 `Ubuntu14`、`CentOS7` 或更高版本的操作系统 | ||
PHP版本依赖 | ||
---------- | ||
* `Swoole-1.x`需要 `PHP-5.3.10` 或更高版本 | ||
* `Swoole-2.x`需要 `PHP-7.0.0` 或更高版本 | ||
* 不依赖 `PHP` 的 `stream`、`sockets`、`pcntl`、`posix`、`sysvmsg` 等扩展。`PHP` 只需安装最基本的扩展即可 | ||
|
||
|
||
ARM平台(树莓派Raspberry PI) | ||
-------------------- | ||
* 请使用 `1.7.10` 或更高版本 | ||
* 使用 `GCC` 交叉编译 | ||
* 在编译 `Swoole` 时,需要手工修改 `Makefile` 去掉 `-O2` 编译参数 | ||
|
||
MIPS平台(OpenWrt路由器) | ||
------ | ||
* 请使用 swoole-1.7.21 或更高版本 | ||
* 使用 GCC 交叉编译 | ||
|
||
CygWin环境支持(Windows系统) | ||
------------ | ||
swoole-1.7.7 增加了对 cygwin 环境的支持,在 Windows 环境下,可以直接使用 cygwin + php 来跑 swoole 程序。 | ||
|
||
* 安装 cygwin,并安装 gcc、make、autoconf、php 4个包 | ||
* 下载swoole源码,在 cygwin-shell 中进行 phpize/configure/make/make install | ||
* 修改 php.ini,加入 swoole.so | ||
|
||
> cygwin 模式下需要对 PHP 进行简化,去掉不使用的扩展,避免进程占用内存过大,导致 Fork 操作失败 | ||
BashOnWindows | ||
----------- | ||
Windows 10 系统增加了 Linux 子系统支持,BashOnWindows 环境下也可以使用 swoole。安装命令 | ||
|
||
``` | ||
apt-get install php7.0 php7.0-curl php7.0-gd php7.0-gmp php7.0-json php7.0-mysql php7.0-opcache php7.0-readline php7.0-sqlite3 php7.0-tidy php7.0-xml php7.0-bcmath php7.0-bz2 php7.0-intl php7.0-mbstring php7.0-mcrypt php7.0-soap php7.0-xsl php7.0-zip | ||
pecl install swoole | ||
echo 'extension=swoole.so' >> /etc/php/7.0/mods-available/swoole.ini | ||
cd /etc/php/7.0/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini | ||
cd /etc/php/7.0/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini | ||
``` | ||
|
||
* BashOnWindows 环境下必须关闭 `daemonize` 选项 | ||
* 需要修改 `config.h` 关闭 `HAVE_SIGNALFD` | ||
|
||
DockerOnWindows | ||
--------------- | ||
在 `Windows` 下开发可以使用 `Hyper-V+Docker` 来方便的开发 `Swoole` 应用,安装好 `Docker` 后再 `Settings` 里的 `Shared Droves` 选项里共享代码所在磁盘。然后使用如下命令来快速启动 `Docker` 容器。 | ||
|
||
``` | ||
docker run --rm -t -i --name myapp -p 9501:9501 -v e:/path/to:/app:rw xutongle/php:7.1-fpm /bin/bash | ||
``` | ||
|
||
* `e:/path/to` 为源码所在路径 | ||
* `/app` 为容器内路径 | ||
* 在 `bash` 里执行 `cd /app && php server.php` | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
#衍生开源项目 | ||
|
||
开发框架 | ||
---- | ||
* [Swoft](https://www.swoft.org) 首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。 | ||
* [EasySwoole](http://www.easyswoole.com/) EasySwoole 是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。 | ||
* [SwooleDistributed](https://github.com/SwooleDistributed/SwooleDistributed) SD框架全称SwooleDistributed,从名称上看一个是Swoole一个是Distributed,他是基于Swoole扩展的可以分布式部署的应用服务器框架。 借助于PHP的高效开发环境,Swoole的高性能异步网络通信引擎,以及其他的高可用的扩展和工具,SD框架提供给广大开发者一个稳定的高效的而且功能强大的应用服务器框架。 | ||
* [MixPHP](http://www.mixphp.cn/) 是一个基于 Swoole 的常驻内存型 PHP 高性能框架,围绕常驻内存的方式而设计,提供了 Web / Console 开发所需的众多开箱即用的组件,MixPHP 追求简单、实用主义,开发文档完善,试图让更多开发者以更低的学习成本享受到 Swoole 带来的高性能与全新的编程体验。 | ||
* [Swoolefy](https://github.com/bingcool/swoolefy) 基于swoole扩展实现的轻量级高性能的API和Web应用服务框架,高度封装了http,websocket,udp服务器,以及基于tcp实现可扩展,自定义协议的rpc服务器,同时支持composer包方式快速部署项目。基于易用,swoolefy抽象Event事件处理类,实现与底层的回调的解耦,专注逻辑业务,支持同步|异步调用,内置view、Log、session、mysql、redis、memcached、mongodb,mailer等常用组件。 | ||
|
||
服务器 | ||
------ | ||
* [MyQEE-Server](https://github.com/myqee/server) 将swoole服务和功能对象抽象化,为每个 Worker、Task、多端口分配一个对象,带来全新的编程体验让代码清晰有条理,适合多端口以及Http、WebSocket、Tcp混合的应用服务器开发,支持创建大文件、断点、分片上传的Http服务器 | ||
* [EPServer](https://github.com/ewenlaz/epserver) 高性能TCP服务器框架,底层基于swoole扩展 | ||
* [WebSocket & WebIM](https://github.com/matyhtf/PHPWebIM) | ||
* [Upload-Server](https://github.com/matyhtf/swoole/blob/master/examples/server/upload_server.php) 基于swoole扩展开发的,高性能TCP文件上传服务器,是全异步非阻塞多进程的。可同时支持数万个TCP客户端连接,上传文件。 | ||
* [php-queue](https://github.com/matyhtf/php-queue) PHP开发的磁盘存储消息队列服务,基于leveldb和swoole,在4核机器上处理能力可以达到2.5W/s | ||
* [PtWebserver](https://git.oschina.net/pantian/PtWebserver) PtWebserver 基于php swoole 扩展的高性能web 服务器。应用对象常驻内存,不用重复创建对象,提高响应时间与性能 | ||
* [swoole-jobs](https://github.com/kcloze/swoole-jobs) swoole-jobs,基于swoole的job调度组件,支持composer,可以跟任意框架集成 | ||
|
||
应用项目 | ||
---- | ||
* [zchat](https://github.com/shenzhe/zchat) 基于zphp框架和swoole扩展开发的PHP网页即时聊天室系统。 | ||
* [PHPWebIM](https://github.com/matyhtf/phpwebim) 基于swoole扩展开发的websocket网页聊天系统 | ||
* [swoole_flash_game](https://github.com/matyhtf/swoole_flash_game) 基于swoole扩展开发的flash游戏,可与服务器实时交互 | ||
* [statistics](https://github.com/smalleyes/statistics) 一个运用php与swoole实现的统计监控系统 | ||
* [swoole-bot](https://github.com/kcloze/swoole-bot)基于swoole实现的微信机器人,依赖vbot和微信网页版的功能,帮助管理微信群/聊天/踢人等 | ||
* [vbot](https://github.com/hanson/vbot) 基于web api打造的微信机器人,可以通过配置开启 swoole,便可打造自己的个性化微信客户端 | ||
|
||
微服务框架 | ||
--- | ||
* [SwooleDistributed](http://sd.youwoxing.net) 2.0版本为微服务框架,具有服务注册中心,可以发布服务,监测服务状态,进程内的负载均衡,同时具有熔断,降级等保护服务的高级功能。服务健康状态,上下线服务自动感知,可以通过RPC或者HTTP与其他服务器进行交互。如果服务中断框架会自动将请求迁移到可用的服务上,尽量保证高可用性,性能更是优秀。通过版本管理还可以支持灰度发布。 | ||
* [Group-Co](https://github.com/fucongcong/Group-Co) 优雅的异步协程框架,并内置分布式服务化体系,可以根据自身架构需求自定义实现服务的上下线,监控,发布等等。 | ||
|
||
HTTP 应用框架 | ||
----- | ||
* [zhttp](https://github.com/keaixiaou/zhttp) 基于swoole+generator的异步非阻塞轻量级web框架(api和web皆可),内置mysql、redis、memcached、mongodb全套异步客户端的连接池,内置http异步客户端,近乎同步的写法,却是异步的调用,性能强悍 | ||
|
||
* [FastD](https://github.com/JanHuang/fastD) 适用于对性能有要求的 API 场景,并且灵活的扩展性可以让开发者们更容易地建造自己的服务。支持HTTP、TCP、UDP、WebSocket,简单,易用。 | ||
|
||
* [LaravelS](https://github.com/hhxsv5/laravel-s) 基于Swoole加速Laravel/Lumen,常驻内存,内置HTTP/Websocket服务器,异步的事件监听,异步任务队列,毫秒级定时任务,平滑Reload,与Nginx配合搭建高可用分布式服务器群,开箱即用。 | ||
|
||
* [Yii2-Swoole](https://github.com/tsingsun/yii2-swoole) 支持基于Yii2框架运行于Swoole中,同时可以很简单的支持Swool 1.0与2.0协程,自带mysql,redis连接池,可以使用Yii2的全栈框架来开发HTTP,WebSocket等网络服务。 | ||
``` | ||
如果您有基于swoole开发新的开源项目,可以联系我们。将你的开源项目加入swoole官方推荐列表中。 | ||
``` |
Oops, something went wrong.