pengyu / server
a compact network communication server wirtten by php
dev-master
2019-09-02 02:52 UTC
Requires
- php: >= 7.0.0
This package is auto-updated.
Last update: 2024-04-29 04:32:24 UTC
README
PyServer是一款纯PHP编写的网络通信框架,架构简单易上手
简介
传统PHP编写的Web应用所使用的架构一般是LNMP模式,Nginx+PHP-FPM的经典搭配可以帮助开发者快速搭建一套Web服务器用于自身的业务。随着业务的发展,功能需求也变得多样性,单一“请求-回复”的响应模式变得不够用,比如一些长连接的业务使用原先的架构实现就会变得非除困难。虽然有Swoole的出现,但是上手门槛对于习惯了CURD一把梭的PHPer来说有点高,有一定的学习成本。PyServer其实就是一个缩水版的Workerman,在代码和功能缩减的情况下保证业务的完整性,框架默认实现了HTTP协议,使得开发者可以脱离Nginx当作独立的Server,自定义协议可方便的适应业务需求。
功能特色
- 架构简单(Master-Worker模型)
- composer快速安装引入项目
- 守护进程模式
- 工作进程数可调整
- 毫秒级定时器
- 多种调度器供选择(在安装了event扩展时,默认是Event调度器)
- Tcp长连接
- 协议可自定义
- 可作为Http服务器
- 可作为WebSocket服务器
安装
git方式安装
git clone https://github.com/herepy/PyServer.git cd PyServer && composer install
composer方式安装
composer require pengyu/server
示例
配置
require_once "vendor/autoload.php"; use Pengyu\Server\Worker\Server; $worker=new Server("http://0.0.0.0:8080"); $worker->config([ "workerCount" => 4, //工作进程数 "deamon" => true //守护进程模式 "logFile" => "/log/xx.log" //日志文件地址 "accessFile" => "/log/access.log" //http访问记录文件地址 ]); //设置工作进程启动时的回调 $worker->on('workerStart',function ($worker){ //do something }); $worker->run();
Http
require_once "vendor/autoload.php"; use Pengyu\Server\Worker\Server; $worker=new Server("http://0.0.0.0:8080"); //设置接收到客户端请求时的回调 $worker->on('request',function ($content,$response){ var_dump($content); //相关设置 $response->status(200); $response->header("Content-Type","text/html;charset=utf-8"); $response->cookie("name","py",3600); //响应数据 $response->end("hello world"); }); $worker->run();
Websocket
require_once "vendor/autoload.php"; use Pengyu\Server\Worker\Server; $worker=new PyServer("ws://0.0.0.0:8888"); $worker->on('message',function ($connection,$fd,$content){ //发送数据 $connection->send($fd,"received:".$content); }); $worker->run();
定时器
require_once "vendor/autoload.php"; use Pengyu\Server\Worker\Server; use Pengyu\Server\Util\Timer; $worker=new PyServer("http://0.0.0.0:8080"); $worker->on('workerStart',function (){ //持续性定时器 $timerA=new Timer(2,function(){ echo "persist timer"; },true); //一次性定时器 $timerB=new Timer(5,function()use($timerA){ echo "once timer"; //取消定时器 $timerA->cancel(); }); }); $worker->run();