这是PHP使用workerman框架+event-loop实现的协程
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Coroutine;
use Workerman\Events\Fiber;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$worker2 = new Worker('http://0.0.0.0:8001');
$worker2->eventLoop = Fiber::class; // 使用自带的Fiber协程
$worker2->onWorkerStart = function (Worker $worker) {
Coroutine::create(function () {
Timer::sleep(5);
echo file_get_contents("https://www.baidu.com/");
});
echo "协程返回...";
};
Worker::runAll();
这是golang原生协程
package main
import (
"fmt"
"io"
"net/http"
"sync"
"time"
)
func main() {
waitGroup := sync.WaitGroup{}
go func() {
waitGroup.Add(1)
time.Sleep(5 * time.Second)
response, _ := http.Get("https://www.baidu.com/")
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
waitGroup.Done()
}()
fmt.Println("协程返回...")
waitGroup.Wait()
}
已经很久没用PHP了,不过不得不说PHP能发展到今天这一步还是很不错的,现在PHP协程、异步解决方案也是日渐完善了起来,想当年PHP协程的唯一方案还是swoole,但是苦与和php-fpm的生态有断层,所以使用的时候还是会酌情选择的,但是终究感觉PHP这一切貌似来的太晚了哈哈哈,可能一切都是天注定吧。