Рубрики
Uncategorized

Swoole 5 удалит функцию автоматического добавления события:: wait ()

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

В предыдущих версиях напишите Cli При использовании асинхронных или совместных функций в сценариях командной строки, Swool Автоматически проверяет в конце сценария наличие или отсутствие Событие::ожидание() Вызов, если нет, базовая функция автоматически вызовет register_shutdown_function Вызывается в конце сценария Событие::ожидание() Введите цикл событий.

Эта функция доставляет много проблем нижнему слою, и нам приходится проделывать большую работу по кодированию, чтобы решить эту проблему. Тем не менее, все еще существует множество потенциальных рисков, таких как некоторые PHP Утечки памяти в версиях, вызванные определенными специальными приложениями дамп ядра И так далее. В последнем Свул 5 В этом издании мы готовы сбросить это историческое бремя. Больше никаких автоматических добавлений Событие::ожидание() достижение PHP функции выключения Списка.

СерверПроцессПроцесс\Бассейн Пожалуйста, не обращайте внимания на это обновление для связанных программ

Экземпляр ошибки

go(function () {
    Co::sleep(1);
    echo "done\n";
});

Этот код не добавляется в конце сценария Swool\Event::wait() Базовые регистры автоматически функция выключения Список. Сумма в:

register_shutdown_function(function () {
    Swoole\Event::wait();
});

go(function () {
    Co::sleep(1);
    echo "done\n";
});

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

Правильный пример

останься Свол 4.4 или Свул 5 В этой версии рекомендуется, чтобы:

  • Используйте Сопрограмму\Планировщик Как запись в программу
  • Или добавьте его вручную в конце программы Событие::подождите()
$scheduler = new Coroutine\Scheduler;
$scheduler->add(function () {
    Co::sleep(1);
    echo "Done.\n";
});
$scheduler->start();

Рекомендуемое применение

Или:

go(function () {
    Co::sleep(1);
    echo "done\n";
});
Swoole\Event::wait();

Не рекомендуется