栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

高性能 PHP 应用容器之 Workerman

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

高性能 PHP 应用容器之 Workerman

介绍

Workerman 是一款纯 PHP 开发的开源高性能的 PHP 应用容器。可以用它开发 tcp 代理、梯子代理、做游戏服务器、邮件服务器、ftp 服务器、甚至开发一个 php 版本的 redis、php 版本的数据库、php 版本的 nginx、php 版本的 php-fpm 等等。Workerman 可以说是 PHP 领域的一次创新,让开发者彻底摆脱了 PHP 只能做 WEB 的束缚。

实际上 Workerman 类似一个 PHP 版本的 nginx,核心也是多进程 + Epoll + 非阻塞 IO。 Workerman 每个进程能维持上万并发连接。由于本身常驻内存,不依赖 Apache、nginx、php-fpm 这些容器,拥有超高的性能。同时支持 TCP、UDP、UNIXSOCKET,支持长连接,支持 Websocket、HTTP、WSS、HTTPS 等通讯协议以及各种自定义协议。拥有定时器、异步 socket 客户端、异步 Redis、异步 Http、异步消息队列等众多高性能组件。

安装与操作

设置阿里云镜像

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

安装 workerman

composer require workerman/workerman

启动

调试模式
php start.php start
守护进程模式
php start.php start -d

停止

php start.php stop

重启

php start.php restart

平滑重启:不同于普通的重启,平滑重启可以做到在不影响用户的情况下重启服务, 完成业务代码更新。

php start.php reload

查看状态

php start.php status
查看连接状态
php start.php connections

Http 服务器

workerman 提供了 get、post、cookie、session 等组件,可以很方便的进行 http 相关操作。

count = 4;  
// 接收请求  
$http_worker->onMessage = function ($connection, $request) {  
    # 获取整个 get 数组  
    $request->get();  
    # 获取 get 数组的某一个值  
    $name = $request->get('name');  
    # 发送 hello 返回给浏览器客户端  
    $connection->send("hello");  
};  
// 运行 worker  
Worker::runAll();  
  • 启动后,在浏览器访问 http://127.0.0.1:2345 会看到 Hello World,一个基础的 http 服务器就完成了。

websocket 服务器
服务端

onConnect = function ($connection) {  
    echo "New connectionn";  
};  
  
// 当客户端通过连接发来数据时触发  
$ws_worker->onMessage = function ($connection, $data) {  
    // 和客户端发送消息  
    $connection->send('msg: ' . $data);  
};  
  
// 当客户端连接与 Workerman 断开时触发的回调  
$ws_worker->onClose = function ($connection) {  
    echo "Connection closedn";  
};  
  
// 运行 worker  
Worker::runAll();  
客户端

var ws = new WebSocket("ws://localhost:2346");                  
ws.onopen = function()  
{  
    // Web Socket 已连接上,使用 send () 方法发送数据  
    ws.send("customer");  
};  
  
ws.onmessage = function (evt)   
{   
    console.log("接收数据...");  
    console.log(evt.data)  
};  
  
ws.onclose = function()  
{   
    // 关闭 websocket  
    console.log("连接已关闭...");   
};  
  • 打开控制台,可以看到服务端发送的 msg:customer ,一个简单的聊天服务器就搭建起来了。

Timer 定时器
Timer::add(float $time_interval, callable c a l l b a c k [ callback [ callback[args = array(), bool $persistent = rue])
time_interval: 多长时间执行一次,单位秒,支持小数,可以精确到 0.001,即精确到毫秒级别。
callback: 回调函数
args: 回调函数的参数,必须为数组,数组元素为参数值
persistent: 是否是持久的,如果只想定时执行一次,则传递 false,执行一次后自动销毁。
示例

count = 1;  
  
$task->onWorkerStart = function(Worker $task)  
{  
    // 每 2.5 秒执行一次  
    $time_interval = 2.5;  
    Timer::add($time_interval, function()  
    {  
        echo "timer runn";  
    });  
};  
  
// 运行 worker  
Worker::runAll(); 

定时任务示例

定时器可以很方便的完成定时任务的功能,例如和 ThinkPHP 框架的事件相结合,通过事件来触发自动收货、取消订单、统计等功能,下面是 。

创建自定义命令

php think make:command crmebcommandTimer timer

配置 config/console.php 文件

项目根目录执行:

php think timer start

源码附件已经打包好上传到百度云了,大家自行下载即可~

链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27
提取码: yu27
百度云链接不稳定,随时可能会失效,大家抓紧保存哈。

如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~

开源地址
码云地址:
http://github.crmeb.net/u/defu

Github 地址:
http://github.crmeb.net/u/defu

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号