Swoole 服务器

Swoole 服务器依赖于 swoole 并且提供灵活优雅的实现方式。

swoole 必须依赖于 ext-swoole 扩展,并且版本 >= 1.8.5

swoole 服务器的配置文件存放在 config/server.php 中,其中 listen 选项是必填,options 配置项请看 server 配置选项

  1. $ php bin/server {start|status|stop|reload} [-t] {web root 目录,默认使用当前命令执行路径}

默认操作方式是 status,可用于简单查看进程状态。

访问的方式与 FPM 下访问保持一致。开发环境下推荐使用 FPM,生产环境可以尝试用 Swoole 代替 FPM,如果有必要的话

守护进程

以守护进程的方式启动,只需要加一个 —daemon|-d 选项即可。

  1. $ php bin/server {start|status|stop|reload} -d > /dev/null

启动守护进程需要屏蔽输出,屏蔽输出仅仅是屏蔽输出而已,并不会对程序和性能造成影响。

以上即可通过不修改代码,支持 Swoole 操作。

文件监听

文件监听需要依赖 inotify 扩展,需要自行安装。

  1. $ php bin/server watch --dir=需要监听的目录

当监听的目录发生改变时,服务器会自动重启,推荐在开发模式下启用。

多端口监听

服务器支持多端口监听,只需要简单的配置。

  1. return [
  2. 'listen' => 'http://0.0.0.0:9527',
  3. 'options' => [
  4. 'pid_file' => '',
  5. 'worker_num' => 10
  6. ],
  7. // 多端口监听
  8. 'ports' => [
  9. [
  10. 'class' => \FastD\Server\TCPServer::class,
  11. 'listen' => 'tcp://127.0.0.1:9528',
  12. 'options' => [
  13. ],
  14. ],
  15. ],
  16. ];

框架提供一个默认的 TCP 服务,以提供 TCP 调用,可以通过创建发现服务器,监控实现一套 RPC 系统。

每个需要监听的端口需要继承 FastD\Swoole\Server 对象,实现内部抽象方法,具体请查看 examples

注意事项

swoole_http_server和swoole_websocket_server因为是使用继承子类实现的,无法使用listen创建Http/WebSocket服务器。如果服务器的主要功能为RPC,但希望提供一个简单的Web管理界面。

在这样的场景中,可以先创建Http/WebSocket服务器,然后再进行listen监听RPC服务器的端口。

服务器进程

服务器内置 Process 进程,在启动服务器的时候会自动拉起进程,通过 Swoole::addProcess 实现。

配置依然是 server.php

  1. return [
  2. 'listen' => 'http://0.0.0.0:9527',
  3. 'options' => [
  4. 'pid_file' => '',
  5. 'worker_num' => 10
  6. ],
  7. 'processes' => [
  8. 'class' => \Processor\DemoProcessor::class
  9. ],
  10. ];

重写 FastD\Swoole\Processhandle 方法,handle 为进程具体执行的事务。示例: DemoProcessor

下一节: 扩展