当前位置: 首页 > news >正文

FrankenPHP实践

目录

1. 说明

2. 程序修改

3. 性能测试

4. 配置

4.1 Docker化部署

4.2 泛域名和证书设置

4.3 相关命令

5. 要点:

6. 参考


1. 说明

       Frankenphp是一个先进的,结合了高性能Caddy服务器的PHP环境框架,它允许用户只需要少量改动,就能让传统的php前端应用插上翅膀,享受到异步服务带来的量级提升体验,官网:https://frankenphp.dev。

      它实际上是有两种运行模式:普通模式和worker模式,其中的普通模式类似于传统的LNMP容器,只是Nginx换成了Caddy Server,带来的提升并不特别明显。而worker模式就不同了,效果是原来性能的三倍左右。

2. 程序修改

以TP6为例,用worker模式的话,入口程序需改由frankenphp_handle_request包裹使用,参考官网docs: FrankenPHP: the modern PHP app server

<?php
ignore_user_abort(true);require __DIR__ . '/../vendor/autoload.php';$thinkApp = new \think\App();
$http = $thinkApp->http;
$handler = static function () use ($http) {// 初始化并处理请求$response = $http->run();// 发送响应$response->send();// 返回响应后终止应用$http->end($response);
};
$maxRequests = (int)($_SERVER['MAX_REQUESTS'] ?? 0);
for ($nbRequests = 0; !$maxRequests || $nbRequests < $maxRequests; ++$nbRequests) {// 处理请求$keepRunning = \frankenphp_handle_request($handler);// 执行一些在发送 HTTP 响应后的操作gc_collect_cycles(); // 垃圾回收if (!$keepRunning) break;
}

3. 性能测试

Performance benchmark of PHP runtimes - DEV Community

4. 配置

4.1 Docker化部署

docker-compose.yml,其中: 证书路径映射到 /data0/Server/Auths/certs

# compose.yamlservices:php:container_name: frankenphp# image: dunglas/frankenphpbuild:dockerfile: frankenphp.Dockerfilecontext: ./dockerrestart: always# restart: unless-stopped# uncomment the following line if you want to use a custom Dockerfile#build: .environment:SERVER_NAME: api-test001.xxx.com, api-test001a.xxx.com, php:80MAX_REQUESTS: 600FRANKENPHP_CONFIG: |worker {file  /app/public/index.phpnum 42watch}#CADDY_SERVER_EXTRA_DIRECTIVES: try_files {path} {path}/ /index.php?s=/{path}&{query}CADDY_SERVER_EXTRA_DIRECTIVES: |try_files {path} {path}/ /index.php?s=/{path}&{query}ports:- "80:80" # HTTP- "443:443" # HTTPS- "443:443/udp" # HTTP/3volumes:# - /data0/Projects/Test/test001:/app/public#- /home/website/ad_serving_backend:/app  # App src- /home/website/tp:/app  # App src- /data0/Server/Settings/caddy/Caddyfile:/etc/caddy/Caddyfile- /data0/Server/Db/caddy:/data- /data0/Server/Settings/caddy/config:/config- /data0/Server/Auths/certs:/certs# comment the following line in production, it allows to have nice human-readable logs in devtty: true
4.2 泛域名和证书设置

尽管Caddy自带无敌好感的自注册安全证书机制,但有时候我们还是需要手动部署一些已有的证书(nginx原有证书即可),这时我们要编辑Caddyfile做定制:

*.xxx.com {#log {#       # Redact the authorization query parameter that can be set by Mercure#       format filter {#               request>uri query {#                       replace authorization REDACTED#               }#       }#}root * public/encode zstd br gziptls /certs/xxx.com/xxx.com.pem /certs/xxx.com/xxx.com.key{$CADDY_SERVER_EXTRA_DIRECTIVES}php_server
}
4.3 相关命令
docker compose down && docker compose up -d --wait# 修改配置后重拉容器
docker compose down && docker compose -f /data0/Server/Settings/docker-compose/frankenphp/docker-compose.yml up -d --wait# restart
docker compose -f /data0/Server/Settings/docker-compose/frankenphp/docker-compose.yml restart# 日志
docker logs frankenphp

5. 要点:

如果自建镜像扩展插件,需三思是否需要加Opcache,开启后 frankenphp 的watch功能(监控文件修改自动热启)将不能正常使用,但开启后,性能将提高40%左右。

6. 参考

- FrankenPHP: the modern PHP app server

- Performance benchmark of PHP runtimes - DEV Community

相关文章:

FrankenPHP实践

目录 1. 说明 2. 程序修改 3. 性能测试 4. 配置 4.1 Docker化部署 4.2 泛域名和证书设置 4.3 相关命令 5. 要点&#xff1a; 6. 参考 1. 说明 Frankenphp是一个先进的&#xff0c;结合了高性能Caddy服务器的PHP环境框架&#xff0c;它允许用户只需要少量改动&#xff…...

嵌入式硬件电子电路设计(一)开关电源Buck电路

目录 Buck电路基本结构 1. 开关闭合&#xff08;SW 闭合&#xff09; 2. 开关断开&#xff08;SW 断开&#xff09; 3. 开关控制和占空比 MP1584电路分析 其他Buck芯片的电路参考 Buck电路基本结构 下图是简化之后的BUCK电路主回路。下面分析输出电压的产生K闭合后&…...

java项目之协力服装厂服装生产管理系统的设计与实现(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的协力服装厂服装生产管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; …...

Java虚拟机的历程(jvm01)

Java虚拟机的历程&#xff08;jvm01&#xff09; Java虚拟机&#xff08;JVM&#xff09;作为Java语言的核心技术之一&#xff0c;自诞生以来经历了多次迭代与演变。不同的虚拟机在性能、功能以及适用场景上各有侧重。本文将介绍Java虚拟机发展历程中的一些重要虚拟机&#xf…...

[代码随想录Day4打卡] 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II 总结

24. 两两交换链表中的节点 题目&#xff1a; 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 重点&#xff1a; 明确具体交换怎么做。交换其中1&#xff0c;2…...

java项目之校园周边美食探索及分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园周边美食…...

支持 Mermaid 语言预览,用通义灵码画流程图

想像看图片一样快速读复杂代码和架构&#xff1f;通义灵码上新功能&#xff1a;智能问答支持 Mermaid 语言的预览模式&#xff0c;即支持代码逻辑可视化&#xff0c;可以把每段代码画成流程图&#xff0c;像脑图工具一样画出代码逻辑和框架。 操作步骤&#xff1a;选中代码块&a…...

cangjie仓颉程序设计-数据结构(四)

文章目录 ArrayListLinkedListHashSetHashMapTreeMap 本专栏还在持续更新&#xff1a; Cangjie仓颉程序设计-个人总结 这是双子专栏&#xff1a; 仓颉编程cangjie刷题录 这些数据结构都在std.collection.*中。暂时官方包还没有stack, queue等数据结构。服了 import std.coll…...

Redis中储存含LocalDateTime属性对象的序列化实现

目录 1.问题1 向Redis中存入序列化对象 1.1引入 : 1.2解决方案&#xff1a; 1.2.1首先引入依赖 1.2.2然后在RedisConfig中进行配置 1.3 介绍下ObjectMapper 1.3.1 ObjectMapper 1.3.2 objectMapper.registerModule(new JavaTimeModule()); 1.3.3 GenericJackson2Js…...

蚁剑的介绍和使用

蚁剑介绍 蚁剑&#xff08;AntSword&#xff09;是一个开源的跨平台网站管理工具&#xff0c;主要用于渗透测试和安全研究。它提供了一个图形化界面&#xff0c;方便用户管理和操作被攻陷的网站。 安装教程&#xff1a; github官网&#xff1a;https://github.com/AntSwordPro…...

C++之多态的深度剖析(2)

前言 在前面内容中&#xff0c;我们对多态进行了基本的了解&#xff0c;对其中的虚函数进行着重的介绍&#xff0c;本节内容我们将进一步对多态的底层进行观察了解看看它是如何实现的。 多态如何实现 从底层的角度Func函数中ptr->BuyTicket()&#xff0c;是如何作为ptr指向P…...

一篇文章 介绍 shiro反序列化漏洞

shiro反序列化漏洞 Shiro-550反序列化漏洞&#xff08;CVE-2016-4437&#xff09; 漏洞简介 shiro-550主要是由shiro的RememberMe内容反序列化导致的命令执行漏洞&#xff0c;造成的原因是默认加密密钥是硬编码在shiro源码中&#xff0c;任何有权访问源代码的人都可以知道默认加…...

pyav保存视频

目录 imageio替代pyav imageio替代pyav import imageio import numpy as np import torch# 创建一个随机的图像张量&#xff0c;形状为 (N, C, H, W) # 这里 N 30&#xff08;帧数&#xff09;&#xff0c;C 3&#xff08;通道数&#xff09;&#xff0c;H 64&#xff08;…...

.bixi勒索病毒来袭:如何防止文件加密与数据丢失?

导言 在网络威胁剧烈的今天&#xff0c;勒索病毒已成为企业和个人面临的重大安全挑战&#xff0c;其中虫洞勒索病毒习得高强度的加密手段和急剧传播的特性引起关注。一旦感染&#xff0c;就会加密关键数据并索要赎金&#xff0c;导致数据无法访问并带来巨大的财务损失。更为严…...

MySQL安装配置教程

以下是 MySQL 在 Windows 系统下的安装配置教程: 1. 下载 MySQL 访问 MySQL 官方网站(https://dev.mysql.com/downloads/mysql/),根据您的操作系统版本(32 位或 64 位)选择合适的 MySQL 安装包。一般建议下载社区版(Community Server),它是免费且功能丰富的版本。2. …...

Pandas进行数据查看与检查

在数据分析的工作流中,数据的初步查看与检查是非常重要的步骤。通过这一步,可以快速了解数据的结构、属性以及一些关键的统计信息,确保数据符合预期,或者发现数据中的潜在问题。 借助 pandas 库中的常用方法,如 DataFrame.head()、DataFrame.tail()、DataFrame.info() 和…...

‌MySQL中‌between and的基本用法‌、范围查询

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…...

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…...

selinux介绍和Linux中的防火墙

selinux 1、selinux的说明 2、selinux的工作原理 3、selinux的启动、关闭与查看 防火墙 1、什么是防火墙 2、iptables &#xff08;1&#xff09;iptables介绍 参数说明 3、firewalld firewalld-cmd的参数说明...

如何快速掌握这款免费音乐歌词工具:3分钟搞定全网歌词批量下载与格式转换

如何快速掌握这款免费音乐歌词工具&#xff1a;3分钟搞定全网歌词批量下载与格式转换 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代&#xff0c;你是否遇…...

Java开发者必看:Lingbot深度模型服务端集成与高并发处理

Java开发者必看&#xff1a;Lingbot深度模型服务端集成与高并发处理 最近和几个做Java后端的朋友聊天&#xff0c;发现大家对接AI模型服务时&#xff0c;都遇到了类似的头疼事。模型本身效果不错&#xff0c;但一集成到自己的Spring Boot项目里&#xff0c;特别是流量稍微大点…...

AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案

AtlasOS终极指南&#xff1a;专业解决Windows安装错误2502/2503的完整方案 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trendi…...

YOLO X Layout与Python结合实战:自动化文档结构解析应用

YOLO X Layout与Python结合实战&#xff1a;自动化文档结构解析应用 1. 项目背景与价值 在日常工作中&#xff0c;我们经常会遇到大量需要处理的文档——扫描的合同、电子发票、研究报告、技术文档等等。传统的人工处理方式不仅效率低下&#xff0c;还容易出错。想象一下&…...

AIGlasses_for_navigation网络通信基础:TCP/IP协议栈与实时数据传输优化

AIGlasses_for_navigation网络通信基础&#xff1a;TCP/IP协议栈与实时数据传输优化 最近和几个做智能眼镜导航项目的朋友聊天&#xff0c;他们都在为一个问题头疼&#xff1a;眼镜端看到的导航画面&#xff0c;有时候会卡顿一下&#xff0c;或者指令响应慢半拍。这听起来是小…...

解决B站视频收藏难题的8K超清下载解决方案:Bilidown全解析

解决B站视频收藏难题的8K超清下载解决方案&#xff1a;Bilidown全解析 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具&#xff0c;支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析&#xff0c;可扫码登录&#xff0c;常驻托盘。 项目地址: https://gitcode.com/gh_…...

如何用RecastNavigation构建完整的游戏AI导航系统:从入门到实战

如何用RecastNavigation构建完整的游戏AI导航系统&#xff1a;从入门到实战 【免费下载链接】recastnavigation Navigation-mesh Toolset for Games 项目地址: https://gitcode.com/gh_mirrors/re/recastnavigation 想要为你的游戏打造智能的AI导航系统吗&#xff1f;Re…...

RIME输入法词库改造指南:让你的THUOCL词库同时支持简体和港台繁体

RIME输入法词库改造指南&#xff1a;让你的THUOCL词库同时支持简体和港台繁体 在中文输入法的世界里&#xff0c;RIME以其高度可定制性赢得了技术爱好者的青睐。但当我们面对不同地区的中文用户时&#xff0c;一个棘手的现实问题浮现&#xff1a;如何让单一词库同时满足大陆简…...

QQ空间数据备份工具:GetQzonehistory本地化数据留存方案

QQ空间数据备份工具&#xff1a;GetQzonehistory本地化数据留存方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字化时代&#xff0c;个人社交数据的长期保存与管理成为重要需求…...

C# + Halcon实战:药盒上多个条形码一次扫全的配置与代码详解(.NET Framework 4.8)

C# Halcon实战&#xff1a;药盒多条形码高精度识别系统开发指南 在药品包装生产线上&#xff0c;一个药盒往往同时印有追溯码、物流码和防伪码等多种条形码。传统扫码设备通常需要多次定位才能完成读取&#xff0c;而基于Halcon的机器视觉方案能实现毫秒级的多码同步识别。本文…...