-
健康医疗
-
workerman?workerman什么意思
9个月前 (07-14) 类别:健康医疗
- 发布日期:2025-04-18 17:10:54
- 所属类别:健康医疗
- 下载人数:3117
- 版本:
- 大小:
-
扫二维码手机浏览
workerman?workerman什么意思介绍
大家好,workerman相信很多的网友都不是很明白,包括workerman什么意思也是一样,不过没有关系,接下来就来为大家分享关于workerman和workerman什么意思的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
什么是workerman
workerman是一个高性能的PHP socket服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。
workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行
Workerman创建WebSocket客户端和服务端推送数据
本文场景:
服务器A:服务端,目的是要接收外部数据处理后放入消息队列。
服务器B:客户端,向服务器A提供数据。
前面有文章测试了基于HTTP的方案,但都是基于一台服务器自己测试。实际在外部服务器测试时单机请求性能很差,远远达不到处理能力,网路性能制约严重。
原基于HTTP的方案,每次推送都要重新建立连接,消耗过大。所以想到了Socket长连接方案。
扩展:HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包。HTTPS除了 TCP的三个包,还要加上 SSL握手需要的9个包,一共是12个包。
服务端和客户端都是基于Workerman建立的
之前HTTP方案的测试受制于发送瓶颈太严重,单台请求能力才几百每秒,多服务器请求服务端速率正常倍增。
workerman 能在thinkphp的框架上使用吗
与ThinkPHP框架结合以上图的方式:
1、ThinkPHP与Workerman是两个独立的系统,独立部署(可部署在不同服务器),互不干扰。
2、ThinkPHP以HTTP协议提供网页页面在浏览器渲染展示。
3、ThinkPHP提供的页面的js发起websocket连接,连接workerman
4、连接后给Workerman发送一个数据包(包含用户名密码或者某种token串)用于验证websocket连接属于哪个用户。
5、仅在ThinkPHP需要向浏览器推送数据时,才调用workerman的socket接口推送数据。
6、其余请求还是按照原本ThinkPHP的HTTP方式调用处理。
总结:
把Workerman作为一个可以向浏览器推送的通道,仅仅在需要向浏览器推送数据时才调用Workerman接口完成推送。业务逻辑全部在ThinkPHP中完成。
现在假设有这样一个需求:有一群商家在后台网页处理批量导入产品-》服务器接受请求-》开始foreach一个一个处理导入请求。
后端代码
push.php
<?php
useWorkerman\Worker;
require_once'./Workerman/Autoloader.php';
//初始化一个worker容器,监听1234端口
$worker=newWorker('websocket://0.0.0.0:1234');
//这里进程数必须设置为1
$worker->count=1;
//worker进程启动后建立一个内部通讯端口
$worker->onWorkerStart=function($worker)
{
//开启一个内部端口,方便内部系统推送数据,Text协议格式文本+换行符
$inner_text_worker=newWorker('Text://0.0.0.0:5678');
$inner_text_worker->onMessage=function($connection,$buffer)
{
global$worker;
//$data数组格式,里面有uid,表示向那个uid的页面推送数据
$data=json_decode($buffer,true);
$uid=$data['uid'];
//通过workerman,向uid的页面推送数据
$ret=sendMessageByUid($uid,$buffer);
//返回推送结果
$connection->send($ret?'ok':'fail');
};
$inner_text_worker->listen();
};
//新增加一个属性,用来保存uid到connection的映射
$worker->uidConnections=array();
//当有客户端发来消息时执行的回调函数
$worker->onMessage=function($connection,$data)use($worker)
{
//判断当前客户端是否已经验证,既是否设置了uid
if(!isset($connection->uid))
{
//没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid=$data;
/*保存uid到connection的映射,这样可以方便的通过uid查找connection,
*实现针对特定uid推送数据
*/
$worker->uidConnections[$connection->uid]=$connection;
return;
}
};
//当有客户端连接断开时
$worker->onClose=function($connection)use($worker)
{
global$worker;
if(isset($connection->uid))
{
//连接断开时删除映射
unset($worker->uidConnections[$connection->uid]);
}
};
//向所有验证的用户推送数据
functionbroadcast($message)
{
global$worker;
foreach($worker->uidConnectionsas$connection)
{
$connection->send($message);
}
}
//针对uid推送数据
functionsendMessageByUid($uid,$message)
{
global$worker;
if(isset($worker->uidConnections[$uid]))
{
$connection=$worker->uidConnections[$uid];
$connection->send($message);
returntrue;
}
returnfalse;
}
//运行所有的worker(其实当前只定义了一个)
Worker::runAll();
启动后端服务
php push.php start-d
前端接收推送的js代码
varws=newWebSocket('ws://127.0.0.1:1234');
ws.onopen=function(){
varuid='uid1';
ws.send(uid);
};
ws.onmessage=function(e){
alert(e.data);
};
后端推送消息的代码:
//建立socket连接到内部推送端口
$client=stream_socket_client('tcp://127.0.0.1:5678',$errno,$errmsg,1);
//推送的数据,包含uid字段,表示是给这个uid推送
$data=array('uid'=>'uid1','percent'=>'88%');
//发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client,json_encode($data)."\n");
//读取推送结果
echofread($client,8192);
这里的uid不一定是用户的id,也可以理解为任务id即 taskid
workerman能做什么
Workerman是一款纯PHP开发的开源高性能的PHP socket服务框架。
Workerman不同于传统MVC框架,Workerman不仅可以用于Web开发,同时还有更广阔的应用领域,例如即时通讯类、物联网、游戏、服务治理、其它服务器或者中间件,这无疑大大提高了PHP开发者的视野。(推荐学习: workerman教程)
workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。
workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。
Workerman的一些应用方向如下:
1、即时通讯类例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送等等 [示例 workerman-chat聊天室、 web消息推送、小蝌蚪聊天室]
2、物联网类例如Workerman与打印机通讯、与单片机通讯、智能手环、智能家居、共享单车等等。 [客户案例如易联云、易泊时代等]
3、游戏服务器类例如棋牌游戏、MMORPG游戏等等。[示例 browserquest-php]
4、SOA服务化利用Workerman将现有业务不同功能单元封装起来,以服务的形式对外提供统一的接口,达到系统松耦合、易维护、高可用、易伸缩。[示例 workerman-json-rpc、 workerman-thrift]
5、其它服务器软件例如 GatewayWorker,PHPSocket.IO,http代理,sock5代理,分布式通讯组件,分布式变量共享组件,消息队列、DNS服务器、WebServer、CDN服务器、FTP服务器等等
6、中间件例如异步MySQL组件,异步redis组件,异步http组件,异步消息队列组件,异步dns组件,文件监控组件,还有很多第三方开发的组件框架等等
版权说明:如非注明,本站文章均为 皮努努下载 原创,转载请注明出处和附带本文链接;
本文地址:https://www.pinunu.com/jiankang/workermanworkerma.html;
相关推荐
相关资讯
- 排行榜
- 1
自罚隐私越疼的方法 自罚最痛的方法但不会让自己受伤
类别:智能硬件
- 2
[长弓燧龙]芭芭拉(原神) 长弓燧龙 芭芭拉 star!dus
类别:智能硬件
- 3
王者荣耀女生去掉所有服装(王者荣耀如何女生皮肤去掉小内皮肤)
类别:商务办公
- 4
女生去掉所有服装小内()
类别:图像拍照
- 5
原神女角色去掉所有服装(大欧派晃来晃去的八重神子)
类别:影音播放
- 6
原神胡桃被空C出液体()
类别:交通出行
- 7
xp密钥,windowsxp专业版产品密钥
类别:主题美化
- 8
100款禁止安装的软件,手机里千万不能装的软件有哪些
类别:学习教育
- 9
海底总动员国语下载 1080P?海底总动员2下载
类别:生活实用
- 游戏资讯