jacked-php / jacked-server
基于 OpenSwoole 的服务器
Requires
- php: >=8.2
- ext-curl: *
- ext-openswoole: 22.*
- ext-pcntl: *
- adoy/fastcgi-client: ^1.0
- dshafik/bag: ^1.0
- firebase/php-jwt: ^6.10
- guzzlehttp/guzzle: ^7.7
- jacked-php/lite-connect: ^0.0
- kanata-php/conveyor-server-client: ^0.1
- kanata-php/socket-conveyor: ^2.2
- lotharthesavior/hook: ^0.0.1
- monolog/monolog: ^3.7
- nesbot/carbon: ^2.72
- openswoole/core: ^22.1
- symfony/console: ^7.0
- symfony/event-dispatcher: ^7.1
- textalk/websocket: ^1.5
- vlucas/phpdotenv: ^5.6
Requires (Dev)
- openswoole/ide-helper: ^22.0
- phpro/grumphp: *
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.3
- squizlabs/php_codesniffer: ^3.7
- dev-master
- v1.0.12-beta
- v1.0.11-beta
- v1.0.10-beta
- v1.0.9-beta
- v1.0.8-beta
- v1.0.7-beta
- v1.0.6-beta
- v1.0.5-beta
- v1.0.4-beta
- v1.0.3-beta
- v1.0.2-beta
- v1.0.1-beta
- v1.0.0-beta
- 0.1.23
- 0.1.22
- 0.1.21
- 0.1.20
- 0.1.19
- 0.1.17
- 0.1.16
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-v1-beta
This package is auto-updated.
Last update: 2024-09-30 17:00:53 UTC
README
概述
Jacked Server 是一个支持 HTTP 和 WebSocket 的 Web 服务器。Jacked Server 使用 PHP/OpenSwoole 构建。它不仅采用了传统的 OpenSwoole 服务器方法,还支持 FastCGI(PHP-FPM)!这使得它可以为尚未准备好使用 Reactor 架构 的 PHP 应用程序提供更可靠的性能。
快速开始
运行以下命令以准备我们将要服务的示例 Laravel(请注意,您必须安装所有依赖项才能运行 Laravel)
composer create-project --prefer-dist laravel/laravel /var/www/laravel php artisan migrate npm install npm run dev
让我们将 Laravel 应用程序 Jacked!首先,下载 Jacked Server 可执行文件并运行它
wget https://github.com/Jacked-PHP/jacked-server/releases/download/v1.0.3-beta/jackit.phar sudo chmod +x jackit.phar ./jackit.phar /path/to/laravel/public
注意:您可能需要能够与 php-fpm 交互。这可能涉及以 root 或 www-data(
sudo -u www-data ./jackit /path/to/laravel/public
)用户身份运行,并从 www-data 用户可访问的目录(/var/www
)。
现在您可以通过地址 https://:8080 访问 Laravel 应用程序。
安装
安装 composer 包
git clone https://github.com/Jacked-PHP/jacked-server.git
将 .env.example
复制到 .env
cp .env.example .env
导航到该文件夹并运行它
./jackit
这将指向本地 .env,位于 Jacked 服务器根目录(示例服务器在终端中显示的地址处简单地显示一个 Hello world,通常在地址 https://:8080)。
您可以根据需要在此处自定义 .env
,或创建另一个并使用 --config
选项设置其路径。
例如,要执行此服务器,服务于 Laravel 应用程序,可以将服务器指向 Laravel 目录或指向一个配置文件,该文件执行此操作。配置是选项 --config=
# point to the laravel directory ./jackit /path/to/laravel/public # with the option: /jackit --config=/var/www/.env-pointing-to-laravel
参数
请查看 .env.example
文件以获取启动信息,但以下将找到可以在 .env
文件中设置的参数列表
- JACKED_SERVER_INPUT_FILE: 服务器入口点。例如:
/var/www/project/index.php
- JACKED_SERVER_DOCUMENT_ROOT: 服务器文档根目录。例如:
/var/www/project
- JACKED_SERVER_LOG_PATH: 日志文件的路径。例如:
/var/www/project/logs/jacked-server.log
- JACKED_SERVER_LOG_LEVEL: 服务器日志级别。例如:
100
(DEBUG) - JACKED_SERVER_FASTCGI_HOST: FastCGI 主机。例如:
unix:///run/php/php8.3-fpm.sock
(如果是 Unix 套接字)或127.0.0.1
(如果是 TCP 套接字)。 - JACKED_SERVER_FASTCGI_PORT: FastCGI 端口。例如:
9000
(如果是 TCP 套接字)或-1
(如果是 Unix 套接字)。 - JACKED_SERVER_WEBSOCKET_ENABLED: 启用 WebSocket。如果启用,将使用 Socket Conveyor 来路由 WebSocket 请求。
- JACKED_SERVER_HOST: 服务器主机。例如:
0.0.0.0
。 - JACKED_SERVER_PORT: 服务器端口。例如:
8080
。 - JACKED_SERVER_SERVER_TYPE: 服务器类型。例如:
2
(OpenSwoole\Server::SIMPLE_MODE
- 1 - 或OpenSwoole\Server::POOL_MODE
- 2 -)。 - JACKED_SERVER_TIMEOUT: 服务器超时。例如:
60
。 - JACKED_SERVER_READWRITE_TIMEOUT: 服务器读写超时。例如:
60
。 - JACKED_SERVER_SSL_PORT: 服务器 SSL 端口。例如:
443
。 - JACKED_SERVER_SSL_ENABLED: 启用 SSL。接受
true
或false
。 - JACKED_SERVER_SSL_CERT_FILE: SSL 证书文件。例如:
/path/to/ssl-cert
。 - JACKED_SERVER_SSL_KEY_FILE: SSL密钥文件。例如:
/path/to/ssl-key
。 - JACKED_SERVER_REACTOR_NUM: 反应器数量。例如:
4
。 - JACKED_SERVER_WORKER_NUM: 工作进程数量。例如:
4
。 - JACKED_SERVER_STATIC_ENABLED: 启用静态处理器。例如:
true
。 - JACKED_SERVER_STATIC_LOCATIONS: 静态处理器位置。例如:
/imgs,/css,/js,/build
。 - JACKED_SERVER_PID_FILE: 服务器PID文件。例如:
/var/www/project/jacked-server.pid
。 - JACKED_SERVER_AUDIT_ENABLED: 启用审计。例如:
false
。 - JACKED_SERVER_WEBSOCKET_AUTH: 启用WebSocket授权。例如:
false
。 - JACKED_SERVER_WEBSOCKET_SECRET: WebSocket密钥。例如:
my-super-secret
。 - JACKED_SERVER_WEBSOCKET_TOKEN: WebSocket令牌。例如:
my-token
(如果启用了授权,则为一些困难的哈希)。 - JACKED_SERVER_WEBSOCKET_USE_ACKNOWLEDGMENT: 启用WebSocket确认。例如:
false
。请参阅Socket Conveyor文档获取更多信息。 - JACKED_SERVER_REQUEST_INTERCEPTED_URIS: Jacked服务器将拦截的URI。例如:
/api/v1/intercepted,/api/v1/intercepted2
。 - JACKED_SERVER_PERSISTENCE_DRIVER: 持久化驱动程序。例如:
sqlite
- 目前仅支持sqlite作为持久化。 - JACKED_SERVER_PERSISTENCE_SQLITE_DATABASE: SQLite数据库。例如:
:memory:
。
事件
服务器在其生命周期中触发多个事件
-
JackedServerStarted: 服务器启动时触发。
-
JackedRequestReceived: 收到新的请求时触发。
-
JackedRequestError: 处理请求时出现错误时触发。
-
JackedRequestFinished: 请求处理完成后触发。
WebSocket
如前所述,此服务器自带WebSocket,由Socket Conveyor路由。要启用它,将以下设置添加到您的.env
文件
JACKED_SERVER_WEBSOCKET_ENABLED=true
设置后,您可以在Conveyor文档中找到如何与WebSocket服务器交互的坐标。
WebSocket授权
要授权WebSocket服务器,您首先需要获取一个令牌。这通过向端点/broadcasting/auth
发送HTTP POST请求来完成。您的请求必须使用Bearer令牌(以下头部:Auhtorization: Bearer {token here})
进行授权。此Bearer令牌在.env
中的JACKED_SERVER_WEBSOCKET_TOKEN
设置。您必须在请求体中选择通道。请求体的格式如下
{ "channel_name": "test-channel" }
此请求体将定义此连接有权连接到哪些通道。
服务器将返回一个包含auth
键的JSON对象。响应中的auth
键的令牌是您用于连接WebSocket服务器的令牌。
响应中auth
键的令牌是JWT令牌。此令牌用于认证WebSocket连接。令牌在连接WebSocket服务器时作为查询参数token
发送。例如:ws://127.0.0.1?token=your-token-here
。