当前位置:首页 > 安卓软件 > 健康医疗 > 正文
workerman?workerman什么意思 健康医疗

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?workerman什么意思

workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行

Workerman创建WebSocket客户端和服务端推送数据

本文场景:

服务器A:服务端,目的是要接收外部数据处理后放入消息队列。

workerman?workerman什么意思

服务器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