Reference

Hot Code Reload

To ease development against a running Swoole HTTP server, hot code reloading can be enabled.

With this feature enabled, a Swoole worker will monitor included PHP files using inotify, and will restart all workers if a file is changed, thus mitigating the need to manually restart the server to test changes.

This feature should only be used in your local development environment, and should not be used in production!

Requirements

  • ext-inotify

This library ships with an inotify based implementation of Mezzio\Swoole\HotCodeReload\FileWatcherInterface. In order to use it, the inotify extension must be loaded.

Configuration

The following demonstrates all currently available configuration options:

// config/autoload/swoole.local.php

use Mezzio\Swoole\Event\HotCodeReloaderWorkerStartListener;
use Mezzio\Swoole\Event\WorkerStartEvent;

return [
    'mezzio-swoole' => [
        'hot-code-reload' => [
            // Time in milliseconds between checks to changes in files.
            'interval' => 500,
            'paths'    => [
                // List of paths, either files or directories, to scan for changes.
                // By default this is empty; you will need to configure it.
                // A common value:
                getcwd(),
            ],
        ],
        'swoole-http-server' => [
            'listeners' => [
                // Register the hot code reloader listener with the WorkerStartEvent
                WorkerStartEvent::class => [
                    HotCodeReloaderWorkerStartListener::class,
                ],
            ],
        ],
    ],
];

Logging

When a file is reloaded, a notice line will be logged with the message Reloading due to file change: {path}.

The logger used to log these lines is the same used for access logging, which is described in the logging section of this documentation.

Limitations

Only files included by PHP after onWorkerStart will be reloaded. This means that Swoole will not reload any of the following:

  • New routes
  • New pipeline middleware
  • The Application instance, or any delegators used to modify it.
  • The Swoole HTTP server itself.

This limitation exists because the hot code reload features use the Swoole\Server::reload() method to notify Swoole to reload PHP files (see the Swoole reload() documentation for more details).