日存档: 2025年3月8日

通过Nginx反向代理访问SwooleHttp服务

按照以下要求修改你的Nginx配置文件后启重Nginx:

server {
    listen 80;
    server_name sw.cpxiang.tech;
    return 301 https://$host$request_uri; # 将HTTP请求重定向到HTTPS
}

server {
    listen 443 ssl;
    server_name sw.cpxiang.tech;

    ssl_certificate /path/to/fullchain.pem; # SSL证书路径
    ssl_certificate_key /path/to/privkey.pem; # 私钥路径

    location / {
        proxy_pass http://127.0.0.1:9501; # 假设Swoole监听于9501端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Swoole异步MySQL查询

Swoole支持异步MySQL客户端,可以在不阻塞主服务器进程的情况下执行数据库查询。

这对于需要频繁访问数据库的应用来说非常有用。

$server = new Swoole\Server("127.0.0.1", 9501);
 
$server->on('start', function ($server) {
 
    echo "Swoole server is started at http://127.0.0.1:9501\n";
 
});
 
$server->on('receive', function ($server, $fd, $from_id, $data) {
 
    // 异步查询数据库
 
    $db = new Swoole\Coroutine\MySQL();
 
    $server->defer(function () use ($db) {
 
        $db->close();
 
    });
 
    $db->connect([
 
        'host' => '127.0.0.1',
 
        'user' => 'db_user',
 
        'password' => 'db_password',
 
        'database' => 'test',
 
        'charset' => 'utf8',
 
    ]);
 
    $sql = "SELECT * FROM your_table WHERE id = ?";
 
    $stmt = $db->prepare($sql);
 
    $result = $stmt->execute([1]);
 
    if ($result) {
 
        $row = $stmt->fetch();
 
        $server->send($fd, json_encode($row));
 
    } else {
 
        $server->send($fd, "Error: " . $db->error);
 
    }
 
});
 
$server->start();

上面的代码示例使用了Swoole的协程MySQL客户端,它需要在Swoole 4.1.0 或更高版本中启用协程支持。

`$server->defer` 用于确保在协程结束时关闭数据库连接。