Рубрики
Uncategorized

Очарование параллельного программирования PHP + swool

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

PHP-это язык веб-программирования с коротким жизненным циклом. Многие PHPer сформировали модель мышления программирования в рамках FPM. На самом деле, после появления swool режим последовательного программирования был нарушен. С помощью swool вы можете легко реализовать более гибкое параллельное программирование.

Введение в сцену Предположим, мы хотим создать веб-игру из камня, ножниц и ткани. Три игрока одновременно высказывают свои догадки и показывают победителя. В традиционном последовательном веб-программировании наша общая идея заключается в следующем:

Установите форму формы и сохраните ее в MySQL/redis после того, как пользователь отправит заявку, добавьте кнопку “Просмотреть результаты”, и если она еще не закончена, это покажет, что она ждет отправки другими участниками. Когда все трое отправят, запросят хранилище и отобразят конечный результат параллельного программирования В этом сценарии, вы можете использовать swool для реализации параллельного программирования, не полагаясь на хранилище MySQL/redis, и завершить угадывание в памяти.

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

php
$server = new Swoole\Http\Server('127.0.0.1', 9501, SWOOLE_BASE);
$result = [];
$server->on('request', function ($req, $resp) use(&$result) {
    $resp->header('Content-Type', 'text/html; charset=UTF-8');
    if ($req->server['request_method'] == 'GET') {
        $resp->end('
        
        
stone < input type = "radio" value = "scissors" name = "result" > scissors < input type = "radio" value = "cloth" name = "result" > cloth < button type = "submit" > submit < / button >
'); } else { $result[$req->get['name']] = [$req, $resp]; if (count( $result) == 3) { $out = ''; foreach($result as $arr) { [$_req, $_resp] = $arr; $out .= $_req->get['name'] ." : ". $_req->post['result']."
\n"; } foreach($result as $arr) { [$_req, $_resp] = $arr; $_resp->end($out); } $result = []; } } }); $server->start();

Процедура выполнения php game.php Откройте три вкладки chrome. И входящее имя в URL-адресе-это a, B и C соответственно, представляющие трех пользователей.

При отправке первого и второго результатов результаты не возвращаются, и chrome зацикливается на ожидании, пока сервер вернет результаты. При отправке третьей формы три страницы вкладок возвращают результаты одновременно.

Проблема параллелизма Параллельное программирование является более мощным и сложным, чем последовательное программирование. Параллельное программирование столкнется с новыми проблемами, которых раньше не было в последовательном программировании, такими как:

Проблемы с синхронизацией данных Проблемы с управлением контекстом Проблема времени Это требует от разработчиков более строгого инженерного мышления, а также более глубоких навыков программирования.

Изменение мышления На самом деле, swool подрывает предыдущий режим программирования PHP, делая видение программиста больше не ограниченным обработкой запроса, больше не ограниченным работой с базой данных и вызовом интерфейса. Благодаря возможностям совместного программирования, предоставляемым swoole4, в пространстве памяти могут быть реализованы различные сложные взаимодействия.

Новая модель программирования позволяет Php легко реализовывать онлайн-игры, серверную систему, умный дом, Интернет вещей и другие проекты.

Перепечатка: https://course.swoole-cloud.com/article/9