Рубрики
Uncategorized

Выпуск Swift 2.0.4, процесс, компоненты TCP

Автор оригинала: David Wong.

Что такое Свифт?

Swift-это платформа для совместной работы с микросервисами PHP, основанная на расширении Woolen. Как и Go, Swift имеет встроенные сетевые серверы протоколов и часто используемые клиенты протоколов и находится в памяти, независимо от традиционного PHP-FPM. Существуют режимы совместной работы, аналогичные языку Go, гибкие аннотации, такие как Spring Cloud framework, мощный глобальный контейнер для инъекций зависимостей, идеальное управление услугами, гибкий и мощный AOP, стандартная реализация спецификации PSR и так далее.

Swift встроил Swift в Весеннее облако в мире PHP за три года накопления и изучения направлений. Это лучший выбор для высокопроизводительной платформы PHP и управления микросервисами.

процесс

Компонент процесса включает в себя следующие три функции:

  • Технологическая операция
  • Пользовательский процесс
  • Пул процессов

Пользовательский процесс

Некоторые сценарии обслуживания, такие как Http/RPC/Websocket/TCP, требуют фонового процесса для мониторинга, отчетов или других специальных операций. В это время определенный пользователем рабочий процесс может быть добавлен в соответствующую службу при ее запуске. Пользовательский пользовательский процесс начинается с обслуживания и завершается закрытием службы. Если пользовательский пользовательский процесс случайно закрыт, служба перезапустит новый пользовательский пользовательский процесс, чтобы убедиться, что пользовательский пользовательский процесс всегда существует.

/**
 * Class MonitorProcess
 *
 * @since 2.0
 *
 * @Bean()
 */
class MonitorProcess extends UserProcess
{
    /**
     * @param Process $process
     *
     * @throws DbException
     */
    public function run(Process $process): void
    {
        $process->name('swoft-monitor');

        while (true) {
            $connections = context()->getServer()->getSwooleServer()->connections;
            CLog::info('monitor = ' . json_encode($connections));

            // Database
            $user = User::find(1)->toArray();
            CLog::info('user='.json_encode($user));

            // Redis
            Redis::set('test', 'ok');
            CLog::info('test='.Redis::get('test'));

            Coroutine::sleep(3);
        }
    }
}

Пул процессов

Пулы процессов обычно используются в сценариях, где требуется постоянное выполнение программ, таких как потребление очередей и вычисление данных. Платформа Swift, основанная на новой инкапсулированной модели всего пула процессов, позволяет разработчикам быстро и просто использовать пул процессов.

Для настройки

return [
    'processPool' => [
        'class' => ProcessPool::class,
        'workerNum' => 3
    ]
];

Определение процесса

/**
 * Class Worker1Process
 *
 * @since 2.0
 *
 * @Process()
 */
class Worker1Process implements ProcessInterface
{
    /**
     * @param Pool $pool
     * @param int  $workerId
     */
    public function run(Pool $pool, int $workerId): void
    {
        while (true) {
            CLog::info('worker-' . $workerId);

            Coroutine::sleep(3);
        }
    }
}

команда

$ php bin/swoft process

Group: process
Usage:
  bin/swoft process:COMMAND [--opt ...] [arg ...]

Global Options:
      --debug      Setting the application runtime debug level(0 - 4)
      --no-color   Disable color/ANSI for message output
  -h, --help       Display this help message
  -V, --version    Show application version information

Commands:
  reload        No description message
  restart       No description message
  start         No description message
  stop          No description message

Example:
 bin/swoft process:start     Start the process pool
 bin/swoft process:stop      Stop the process pool

View the specified command, please use: bin/swoft process:COMMAND -h

TCP

Компонент TCP основан на оригинальном сервере swool и инкапсулирует и уточняет использование функций.

Для настройки

 'tcpServer'   => [
    'class'   => TcpServer::class,
    'port' => 18309,
    'debug' => env('SWOFT_DEBUG', 0),
    /* @see TcpServer::$setting */
    'setting' => [
        'log_file' => alias('@runtime/swoole.log'),
    ],
],
/** @see \Swoft\Tcp\Protocol */
'tcpServerProtocol' => [
    'type'            => \Swoft\Tcp\Packer\SimpleTokenPacker::TYPE,
    // 'openEofCheck'    => true, // Defalut use EOF check
    // 'openLengthCheck' => true,
],

Контроллер

/**
 * Class DemoController
 *
 * @TcpController()
 */
class DemoController
{
    /**
     * @TcpMapping("list", root=true)
     * @param Response $response
     */
    public function list(Response $response): void
    {
        $response->setData('[list]allow command: list, echo, demo.echo');
    }
}

команда

$ php bin/swoft tcp
Description:
  There some commands for manage the tcp server

Usage:
  tcp:{command} [arguments] [options]

Commands:
  start    Start the tcp server
  stop     Stop the running server
  restart  Restart the running server

Options:
  -h, --help  Show help of the command group or specified command action

Обновление содержимого

Совершенствование:

  • Swoft\Http\Сообщение\Запрос Недавно добавлено getHeaderLines() (74a2a91)
  • Aop добавил получить карту аргументов() и Имя класса() Методы (c47e785)
  • Недавно добавлена srun() Функция для планирования совместной маршрутизации (3c4a6a4)
  • Оптимизация событий сервера( при запуске /| при запуске работы при завершении работы при завершении работы |/Инцидент с протоколом поддержки (a8d5a8d) Новая задача блокировки синхронизации доставки (ec938e5) Добавьте Redis
  • вызов
  • Метод для использования той же операции подключения (92456987) Совместимость со Swool 4.4.x

Исправлено:

  • Имя класса восстановления миграции слишком длинное, чтобы привести к неполной записи имени класса (58314b8)
  • Использовать после исправления запросов сущностей Установщик После обновления значений полей обновление Неверное обновление (caadf0e)
  • Возвращаемая ошибка удаления файла PID после исправления остановки, приводящая к сбою перезапуска (2be450bf11)
  • Устранена проблема, связанная с тем, что язык по умолчанию I18N недопустим (b401a504e)
  • Исправлен сервер WS с несколькими рабочими, не способный активно закрывать другие рабочие соединения (271b6398)
  • Исправлено несоответствие типов контента при получении HTTP-сервером XML-запроса (2ff9a4e61)
  • Восстановление с помощью базы данных, json Недопустимая операция (92456987)
  • Ремонтный ограничитель Ограничитель скорости Redis с префиксом Непригоден для использования (7b54d4c)

Обновление:

  • Обновление сервера WS можно выполнить с помощью конфигурации отключенных модулей Для отключения модуля WS (fa31111d)

Дополнительный:

  • Увеличьте презентацию кейса на официальном сайте. Добро пожаловать для отправки дел на официальный склад кейсов soft-cloud/soft-case.
  • Изменения в документах на GitHub будут автоматически обновлены до официальных документов, и обновление вручную не требуется.

Новое (Новое)

  • Управление процессами (c61b8f7)
  • Пользовательский пользовательский процесс (c328d54)
  • Пул процессов (d2e6290)
  • TCP-сервер

Примечания по обновлению:

  1. Пожалуйста, избавься от этого. bin/swift Li Время выполнения::enanbleCoroutine() Настройка
  2. Убедитесь, что имя swool swool.use_short Значение равно Вкл

Ресурсы

  • Название: https://gitee.com/swoft/swoft
  • GitHub: https://github.com/swoft-cloud/swoft
  • Официальный сайт: https://www.swoft.org
  • Документ: https://www.swoft.org/docs