xin/workman-server

There is no license information available for the latest version (v1.0.0) of this package.

基于 Workman 实现的服务器是一种高性能的 PHP 服务器解决方案,能够无缝接入 ThinkPHP、Laravel 等主流框架。

v1.0.0 2025-03-29 11:29 UTC

This package is not auto-updated.

Last update: 2025-04-01 08:34:29 UTC


README

介绍

基于 Workman 实现的服务器是一种高性能的 PHP 服务器解决方案,能够无缝接入 ThinkPHP、Laravel 等主流框架。以下是关于如何使用 Workman 构建服务器并与主流框架集成的说明:

Workman 简介

Workman 是一个轻量级的 PHP 服务器框架,专注于高性能和低资源消耗。它支持多进程、异步处理和热部署,非常适合构建高并发的应用程序。通过简单的配置,Workman 可以轻松与 ThinkPHP、Laravel 等主流框架集成,提供高效的开发和运行环境。

特点

高性能:支持多进程和异步处理,能够处理大量并发请求。 热部署:无需重启服务器即可更新代码。 易于集成:与主流框架无缝对接,无需修改框架核心代码。 灵活配置:支持多种协议(HTTP、WebSocket、TCP 等)。

安装教程

composer require xin/workerman-server

使用说明

配置文件 config.php

<?php
<?php

use App\Listeners\Websocket\WebsocketListener;

global $argv;
return [
	// Http 服务
	'http' => [
		'enable' => true,
		// 设置协议
		'name' => 'HttpServer',
		// 设置监听的地址和端口
		'bind_address' => '0.0.0.0:9501',
		// 设置进程数
		'count' => 1,// cpu_count(),
		// 传输协议
		'transport' => 'tcp',
		// 设置用户权限
		'user' => '',
		// 设置用户组权限
		'group' => '',
		// 服用端口
		'reuse_port' => false,
		// 在向子进程发送停止命令stopTimeout秒后,如果进程仍在运行,则强制终止。
		':stop_timeout' => 2,
		// PID 文件
		':pid_file' => storage_path() . '/workerman.pid',
		// 状态文件
		':status_file' => storage_path() . '/workerman.status',
		// 进程输出文件
		':stdout_file' => storage_path('logs') . '/workerman_stdout.log',
		// 日志文件
		':log_file' => storage_path('logs') . '/workerman.log',
		// 事件循环
		':event_loop_class' => '',
		// 最大数据包大小
		'max_package_size' => 10 * 1024 * 1024,
	],

	// Websocket 服务
	'websocket' => [
		'enable' => false,
		// 网关配置
		'gateway' => [
			// 设置Gateway进程的名称,方便status命令中查看统计
			'name' => 'WebsocketGateway',
			// 设置监听的端口
			'bind_address' => '0.0.0.0:9502',
			// 进程的数量
			'count' => intval(cpu_count() / 2),
			// 内网ip,多服务器分布式部署的时候需要填写真实的内网ip
			'lan_ip' => '127.0.0.1',
			// 监听本机端口的起始端口
			'start_port' => 2300,
			// 心跳间隔
			'ping_interval' => 10,
			// 服务端主动发送心跳
			'ping_not_response_limit' => 0,
			// 心跳数据
			'ping_data' => '{"type":"ping"}',
			// 服务注册地址
			'register_address' => '127.0.0.1:1236',
			// 处理器
			'handler' => [
				//                'use' => 'App\WebSocket\Gateway',
				//                'constructor' => [],
			],
		],

		// 业务进程配置
		'business_worker' => [
			// 设置BusinessWorker进程的名称
			'name' => 'WebsocketBusinessWorker',
			// 设置BusinessWorker进程的数量
			'count' => cpu_count(),
			// 注册服务地址
			'register_address' => '127.0.0.1:1236',
			// 设置使用哪个类来处理业务,业务类至少要实现onMessage静态方法,onConnect和onClose静态方法可以不用实现
			'event_handler' => WebsocketListener::class,
		],

		// 服务注册配置
		'register' => [
			// 设置Gateway进程的名称,方便status命令中查看统计
			'name' => 'WebsocketRegister',
			// 设置监听的端口
			'bind_address' => '0.0.0.0:1236',
		],
	],

	// 其他进程
	'process' => [
		[
			'handler' => [
				'use' => Xin\WorkmanServer\Handlers\HotWatcherHandler::class,
				'constructor' => [
					// Monitor these directories
					'monitorDir' => array_merge(
						[
							base_path('app'),
							base_path('config'),
							base_path('routes'),
							base_path() . '/.env',
							base_path('public') . '/.index.php',
						],
					),
					// Files with these suffixes will be monitored
					'monitorExtensions' => [
						'php', 'html', 'htm', 'env',
					],
					'options' => [
						'enable_file_monitor' => !in_array('-d', $argv ?? []) && DIRECTORY_SEPARATOR === '/',
						'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
					],
				],
			],
			'reloadable' => false,
		],
	],
];