入门指引

Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。

Swoole要求使用者必须具备一定的Linux/Unix环境编程基础,《学习Swoole需要掌握哪些基础知识》 本文列出了基础知识清单。

Server

强大的TCP/UDP Server框架,支持多线程,EventLoop,事件驱动,异步,Worker进程组,Task异步任务,毫秒定时器,SSL/TLS隧道加密。

  • Http\ServerServer的子类,内置了Http的支持
  • WebSocket\ServerHttp\Server的子类,内置了WebSocket的支持
  • Redis\ServerServer的子类,内置了Redis服务器端协议的支持

子类可以调用父类的所有方法和属性

Client

TCP/UDP/UnixSocket客户端,支持IPv4/IPv6,支持SSL/TLS隧道加密,支持SSL双向证书,支持同步并发调用,支持异步事件驱动编程。

Event

EventLoop API,让用户可以直接操作底层的事件循环,将socketstream,管道等Linux文件加入到事件循环中。

eventloop接口仅可用于socket类型的文件描述符,不能用于磁盘文件读写

Async

异步IO接口,提供了 异步文件系统IO,定时器,异步DNS查询,异步MySQL等API,异步Http客户端,异步Redis客户端。

  • Timer: 异步毫秒定时器,可以实现间隔时间或一次性的定时任务
  • swoole_async_read/swoole_async_write 文件系统操作的异步接口

异步回调API4.4版本中已废弃

Coroutine

Swoole2.0开始内置协程(Coroutine)的能力,提供了具备协程能力IO接口(统一在命名空间Swoole\Coroutine\*)。

协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。Swoole可以为每一个请求创建对应的协程,根据IO的状态来合理的调度协程,这会带来了以下优势:

开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。

Process

进程管理模块,可以方便的创建子进程,进程间通信,进程管理。

Buffer

强大的内存区管理工具,像C一样进行指针计算,又无需关心内存的申请和释放,而且不用担心内存越界,底层全部做好了。

Table

基于共享内存和自旋锁实现的超高性能内存表。彻底解决线程,进程间数据共享,加锁同步等问题。

Table的性能可以达到单线程每秒读写200W



  • 原来微博的昵称真的可以好长好长

    牛逼,我想知道 有没有基于这些特性封装好的框架、工具集? 这个如果有的话,是可以直接拿来用,并极大提高工作效率、性能的。

  • 多多

    这种异步的,基于tcp的,更多的是实时应用,例如游戏服务器,用框架显得累赘

  • 原来微博的昵称真的可以好长好长

    好吧~~ 游戏服务器确实很适合用这个~ 特别是PHPer用。。 爽爆了~

  • Hoheart

    首先统一一下swoole怎么发音吧?我觉得swu:l比较好听。

  • 游客1

    牛逼,希望php越来越好

  • 周果

    今天听说swoole,过来看看

  • 爱拼才会赢

    swoole 想想很激动

  • funny

    configure: WARNING: unrecognized options: --enable-async-mysql

  • LaravelS (Laravel/Lumen+Swoole) 简单,非侵入式,开箱即用。

  • 归期何期?

    好了,游戏已经上线了。

  • " 航仔 .

    fedora 能不能弄一弄 他这也没有推荐

  • dd

    听说很厉害来研究研究

  • Laragh

    看文档完全看不懂。。。

  • 云剑仙Cloud

    硬磕swoole,加油

  • W
    W

    想转载到自己的博客,做笔记记录可以么

  • StillWell

    php肯定会越来越好

  • phpdi

    swoole开发,修改代码后自动重启服务,每次修改代码,都要重启服务器,这个composer包,用于实现自动重启,感兴趣的同学可以试试

  • 阴天快乐

    支持

  • miya

    good

  • 终生学习者

    4.2.0 彻底移除了异步swoole_http2_client 别看了

  • 可爱的狼

    swoole 确实很强。

  • 渣渣

    很强,很难入门

  • K.

    我想说,在mamp pro 5.3 的环境下,用编译安装,phpinfo()可以正常看到swoole成功,但是cli模式里,运行出错。。php -m 里 看不到swoole,用pecl安装,也是相同的情况。真心难弄。。。。佩服佩服!!!!

  • 晨光

    https://github.com/manaphp/manaphp 一套代码,fpm,swoole内存共享,swoole协程三种模式通吃。 fpm模式下开发,swoole协成模式上线,维护与性能可以兼得