精华内容
下载资源
问答
  • workman

    2019-09-27 02:43:00
    workman安装: 环境安装: 检测依赖环境是否安装 rpm -qa | grep “软件或者包的名字”或者 yum list installed eg: rpm -qa | grep libevent-devel 必须扩展:pcntl(pcntl扩展可以支持php的多线程操作(仅...

    workman安装:

    环境安装:

    检测依赖环境是否安装 rpm -qa | grep “软件或者包的名字”或者 yum list installed

    eg:
    rpm -qa | grep libevent-devel

    必须扩展:pcntl(pcntl扩展可以支持php的多线程操作(仅限linux系统))、posix 

    可选扩展:event(php7)或者 libevent(php5) 选其中一个  且这两个扩展依赖libevent-devel扩展

    一键环境全装:

    #此步骤包含了安装php-cli主程序以及pcntl、posix、libevent库及git程序
    yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y

    单独安装:

    检测:扩展是否安装:curl -Ss http://www.workerman.net/check.php | php

    #省略安装 pcntl、posix 的步骤
    #安装event扩展的依赖库
    yum install libevent-devel -y   
    #下载并安装event扩展
    wget http://pecl.php.net/get/event-2.5.3.tgz
    tar -zxvf event-2.5.3.tgz 
    cd event-2.5.3
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make
    make install
    #全路径 /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/event.so #php.ini中启用event扩展(下面路径不对的话换成上面的全路径) echo extension
    =event.so > /usr/local/php/etc/php.ini

    环境安装完毕,接下来安装workerman框架:

    git clone https://github.com/walkor/Workerman
    或者直接将文件拷贝到你想要的位置

     基于php多进程以及libevent事件轮询库。不依赖php-fpm、nginx或者apache等这些容器便可以独立运行

    Windows 将workerman下载下来当做vendor第三方插件一样直接使用

    <本机ip>可以为0.0.0.0表示监听本机所有网卡,包括内网ip和外网ip及本地回环127.0.0.1

    <本机ip>如果以为127.0.0.1表示监听本地回环,只能本机访问,外部无法访问

    <本机ip>如果为内网ip,类似192.168.xx.xx,表示只监听内网ip,则外网用户无法访问

    <本机ip>设置的值不属于本机ip则无法执行监听,并且提示Cannot assign requested address错误

    注意:www/test 对应的是 www.demo.com  它的hosts设置的ip为127.0.0.1(监听本地回环

    例子1:http服务:www/test/httpServer.php     

    <?php
    use Workerman\Worker;
    require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php';
    
    // 创建一个Worker监听2345端口,使用http协议通讯
    $http_worker = new Worker("http://www.demo.com:2345");
    
    // 启动4个进程对外提供服务
    $http_worker->count = 4;
    
    // 接收到浏览器发送的数据时回复hello world给浏览器
    $http_worker->onMessage = function($connection, $data)
    {
        // 向浏览器发送hello world
        $connection->send('hello world');
    };
    Worker::runAll();

    打开终端 键入文件所在目录 输入 php httpServer.php start -d    回车就建立http服务器了(无需开启apache或者nginx)   注意修改了这些服务器文件必须 php httpServer.php restart

    浏览器访问www.demo.com:2345 或者127.0.0.1:2345   (浏览器显示hello world)

     

    websocket:www/test/websocketServer.php     

    <?php
    use Workerman\Worker;
    require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php';
    
    // 创建一个Worker监听2345端口,使用http协议通讯
    $ws_worker = new Worker("websocket://0.0.0.0:2222");
    
    // 启动4个进程对外提供服务
    $ws_worker->count = 4;
    
    // 接收到浏览器发送的数据时回复hello加上浏览器发送的数据拼接一起发送给浏览器
    $ws_worker->onMessage = function($connection, $data)
    {
        // 向浏览器发送hello world
        $connection->send('hello'.$data);
    };
    
    Worker::runAll();

    打开终端 键入文件所在目录 输入 php websocketServer.php start -d    回车就建立http服务器了(无需开启apache或者nginx)   注意修改了这些服务器文件必须 php httpServer.php restart

    websoket页 index.php  :怎么访问他呢打开apache:访问www.demo.com:80 

    <html>
    <head></head>
    <body>
        <script type="text/javascript">
            var ws = new WebSocket("ws://www.demo.com:2222");//连接127.0.0.1:222
            ws.onopen=function(){
                ws.send('world');
            }
            ws.onmessage=function(e){
                console.log(e.data);//helloworld
            }
        </script>
    </body
    </html>

     

    <本机ip>可以为0.0.0.0表示监听本机所有网卡,包括内网ip和外网ip及本地回环127.0.0.1

    <本机ip>如果以为127.0.0.1表示监听本地回环,只能本机访问,外部无法访问

    <本机ip>如果为内网ip,类似192.168.xx.xx,表示只监听内网ip,则外网用户无法访问

    <本机ip>设置的值不属于本机ip则无法执行监听,并且提示Cannot assign requested address错误

     

     

    使用Worker::$pidFile = '/var/run/workerman.pid';改变位置时,当他所在服务器启后,然后注释它之后在终端是杀不掉的,因为找不到pid路径了

    所以要先杀掉它启动的服务然后在干别的哦

     

    Worker:onError()由以下几种结果触发

     

     

    mysql代理: 实现 mysql -h127.0.0.1 -P4406 -uroot -p 连接到端口为3306的mysql

     自定义协议

    协议交互流程

    1客户端发送写个数据包给服务端,服务端收到数据调用协议的input方法返回长度值$length给workerman框架

    2得到这个$length值后就会冲反冲区截取出$length长度的数据(即分包)并调用协议的decode方法解包,解包后的数据为$data

    3解包后的workerman将数据$data以回调onMesage($connection,$data)的形式传递给业务

    4.服务端给客户端发送数据时, workerman会自动利用协议的encode方法将$buffer打包后发送给客户端

     

    yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y







    基于workerman的GatewayWorker框架

    下载: 

    composer require workerman/gateway-woker
    或者
    git clone https://github.com/walkor/GatewayWorker

     工作原理

    分布式部署

    创建wss服务(与https一样 参考

     

     

     



    转载于:https://www.cnblogs.com/lichihua/p/11210865.html

    展开全文
  • Workman键盘布局

    2020-04-16 12:31:21
    转自workman官网,不知道你们能不能访问 支持多种操作系统包括,WINDOWS,LINUX,MACOS 安装和说明压缩包里都有。
  • workman配置

    2021-06-25 10:16:23
    workman运用的json框架 : composer require workerman/workerman "workerman/gateway-worker" : "^3.0", 在根目录创建运行的start.php <?php /** * run with command * php start.php start */ ini_...

    Linux x

    我用的框架是thinkphp5.1

    workman运用的json框架 :

    composer require workerman/workerman
    "workerman/gateway-worker" : "^3.0",
    

    在根目录创建运行的start.php

    <?php
    /**
     * run with command 
     * php start.php start
     */
    
        ini_set('display_errors', 'on');
        use Workerman\Worker;
    
        if(strpos(strtolower(PHP_OS), 'win') === 0)
        {
            exit("start.php not support windows, please use start_for_win.bat\n");
        }
    
        // 检查扩展
        if(!extension_loaded('pcntl'))
        {
            exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
        }
    
        if(!extension_loaded('posix'))
        {
            exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
        }
    
        // 标记是全局启动
        define('GLOBAL_START', 1);
    
    require_once __DIR__ . '/vendor/autoload.php';
    
        // 加载所有Applications/*/start.php,以便启动所有服务
        //application/workman/controller/*/start*.php' 这个是我的workman的一个模块
        foreach(glob(__DIR__.'/application/workman/controller/*/start*.php') as $start_file)
        {
            require_once $start_file;
        }
        // 运行所有服务
        $work = new Worker();
        $work ::runAll();
    
    
    
    
    具体的文档可以看文档
    http://doc.workerman.net/appendices/install-extension.html
    
    在workman/controller中创建 Events.php start_businessworker.php  start_gateway.php start_register.php
        Events是负责业务逻辑模块,负责整个异步逻辑的处理,监听,发送数据 
    根据相关的配置进行填写
    
    
    

    比较重要的一点:

    使用这个脚本检查是否有禁用函数。命令行运行curl -Ss http://www.workerman.net/check.php | php

    很多人可能会出现这个错误:

    Class 'GatewayWorker\BusinessWorker' not found start_businessworker.php:28        

    那么可以将你的start.php文件放入项目根目录,

    然后 foreach(glob(__DIR__.'/你的模块,创建的 Events.php start_businessworker.php  start_gateway.php start_register.php 所在目录/*/start*.php') as $start_file)

    然后以

    php start.php start尝试启动,查看是否正常启动

    最后ctrl+c取消,以php start.php start -d 保持运行这个处理


    最后的一个配置:

    composer require workerman/gatewayclient
    
    /**
     * === 指定registerAddress表明与哪个GatewayWorker(集群)通讯。===
     * GatewayWorker里用Register服务来区分集群,即一个GatewayWorker(集群)只有一个Register服务,
     * GatewayClient要与之通讯必须知道这个Register服务地址才能通讯,这个地址格式为 ip:端口 ,
     * 其中ip为Register服务运行的ip(如果GatewayWorker是单机部署则ip就是运行GatewayWorker的服务器ip),
     * 端口是对应ip的服务器上start_register.php文件中监听的端口,也就是GatewayWorker启动时看到的Register的端口。
     * GatewayClient要想推送数据给客户端,必须知道客户端位于哪个GatewayWorker(集群),
     * 然后去连这个GatewayWorker(集群)Register服务的 ip:端口,才能与对应GatewayWorker(集群)通讯。
     * 这个 ip:端口 在GatewayClient一侧使用 Gateway::$registerAddress 来指定。
     * 
     * === 如果GatewayClient和GatewayWorker不在同一台服务器需要以下步骤 ===
     * 1、需要设置start_gateway.php中的lanIp为实际的本机内网ip(如不在一个局域网也可以设置成外网ip),设置完后要重启GatewayWorker
     * 2、GatewayClient这里的Gateway::$registerAddress的ip填写填写上面步骤1lanIp所指定的ip,端口
     * 3、需要开启GatewayWorker所在服务器的防火墙,让以下端口可以被GatewayClient所在服务器访问,
     *    端口包括Rgister服务的端口以及start_gateway.php中lanIp与startPort指定的几个端口
     *
     * === 如果GatewayClient和GatewayWorker在同一台服务器 ===
     * GatewayClient和Register服务都在一台服务器上,ip填写127.0.0.1及即可,无需其它设置。
     **/
    
    Gateway::$registerAddress = '127.0.0.1:1236';
    
    // GatewayClient支持GatewayWorker中的所有接口(Gateway::closeCurrentClient Gateway::sendToCurrentClient除外)
    Gateway::sendToAll($data);
    Gateway::sendToClient($client_id, $data);
    Gateway::closeClient($client_id);
    Gateway::isOnline($client_id);
    Gateway::bindUid($client_id, $uid);
    Gateway::isUidOnline($uid);
    Gateway::getClientIdByUid($client_id);
    Gateway::unbindUid($client_id, $uid);
    Gateway::sendToUid($uid, $dat);
    Gateway::joinGroup($client_id, $group);
    Gateway::sendToGroup($group, $data);
    Gateway::leaveGroup($client_id, $group);
    Gateway::getClientCountByGroup($group);
    Gateway::getClientSessionsByGroup($group);
    Gateway::getAllClientCount();
    Gateway::getAllClientSessions();
    Gateway::setSession($client_id, $session);
    Gateway::updateSession($client_id, $session);
    Gateway::getSession($client_id);
    ```

    展开全文
  • workman使用

    2018-08-08 02:51:00
    1、workman起进程的方式很简单,一个new Worker 是一个守护进程,子进程可以根据自己的需要启用。例子如下: $lCreate = new Worker();$lCreate->count = 1;$lCreate->name = 'lCreate';$lCreate->...

    1、workman起进程的方式很简单,一个new Worker 是一个守护进程,子进程可以根据自己的需要启用。例子如下:

    $lCreate = new Worker();
    $lCreate->count = 1;
    $lCreate->name = 'lCreate';
    $lCreate->onWorkerStart = function($task)
    {
    //每60秒执行一次
    $time_interval = 120;
    Timer::add($time_interval, function()
    {
    $current_time = time();
    $start_time = strtotime(date('Y-m-d 05:00:00',$current_time));
    $end_time = strtotime(date('Y-m-d 06:00:00',$current_time));
    if($current_time >= $start_time && $current_time <= $end_time){
    $lCreate = new lCreate();
    $lCreate->init();
    }
    });
    };

     

    2、Timer 这个定时任务其实单进程,你在同一个timer里面起n个timer,它其实是顺序执行的,所有,如果你有不同的任务需要执行,那么你依旧需要启用不同的进程;

     

    3、在wormman里面使用redis,或者mysql一定要注意,每个子进程都要初始化自己的mysql,或者redis,在常驻内存的php中,mysql连接超时,断开之后是不会重连;

    redis,也是一样。否则会连接不上。

     

    转载于:https://www.cnblogs.com/quepq/p/9440559.html

    展开全文
  • workman知识讲解1

    2018-06-12 10:43:46
    workman 知识的讲解1,里面有详细的介绍,如有不懂的小伙伴记得查阅
  • workman编写的聊天室PHP前端源码,可以支持多房间,是学习workman的好东西
  • 很好理解的composer和workman安装
  • php运行workman文件

    2019-12-03 20:50:43
    php运行workman文件

    php运行workman文件
    在这里插入图片描述

    展开全文
  • 此存储库包含Windows / OS X / Linux(ubuntu,arch)的Workman键盘布局的一些实现。 但是我不建议您使用它,因为有。 此回购还包含俄语的语音实现,因此它仍然很有用。 更新:最新的ubuntu版本已经安装了工作人员...
  • 实现浏览器访问基于workman的异步任务,主要解决了可以直接通过浏览器访问接口的问题。
  • 基于workman的简单聊天室,前台使用websocket协议,后台使用php的socket,请使用命令行工具启动文件夹内的Websocket.php文件
  • tp5-workman-master.zip

    2019-07-24 10:55:56
    tp5 整合workman写的小demo,很实用,希望大家能好好看看
  • workman http分包-未完

    2021-05-14 02:13:00
    那么就面临着这样一个问题,有可能一个tcp连接,快速的向服务端发送请求,那么此时readbuff里面就有可能有多个请求的数据,所以这次我们研究的就是workman的http分包 背景 因为workman可根据安装扩展来使用多种IO...
  • var worker = workman . DefineWorker ( func ( context workman. Task ) { str := context .( string ) fmt . Println ( str ) time . Sleep ( time . Second ) }) var names = [] string { "steve" , "bob" ,...
  • #workman 使用#

    2020-04-10 21:00:33
    1:遇到的问题 场景:使用worman 开始websocket 服务,其中...Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in D:\www\kefu003\workman\vendor\workerman\gateway-worker\src\Lib\DbConnection.php:1707 St...
  • workman如何实现异步任务

    千次阅读 2018-08-30 11:50:26
    workman如何实现异步任务。workman可以帮我解决问题, 给予文档一个解答 问: 如何异步处理繁重的业务,避免主业务被长时间阻塞。例如我要给1000用户发送邮件,这个过程很慢,可能要阻塞数秒,这个过程中因...
  • 为便携式键盘布局(pkl.sourceforge.net)实现了Workman键盘布局和Workman-P(程序员的工人)。
  • tp5+workman

    2019-05-10 00:24:00
    tp5+workman composer require topthink/think-worker=1.0.* 可能会存在版本问题 转载于:https://www.cnblogs.com/wxtrip/p/10842027.html
  • workman微信小程序

    2019-07-16 22:50:11
    检测是否支持workman [root@iZbp1esy3n96esf69makhbZ ~]# curl -Ss http://www.workerman.net/check.php | php PHP Version >= 5.3.3 [OK] Extension pcntl check [fail] Extens...
  • 同时也用到了workman 这个项目主要是创建两个一个命令 task:kaijiang 然后使用workman每隔几秒就去循环执行这个命令 命令的创建 已经搞清楚了 看文档 command即可‘ 主要是如何使用workman再thinkphp5.1中去循环...
  • php简写workman聊天系统

    2021-05-22 10:57:12
    简写workman聊天系统 在这里插入代码片<?php use Workerman\Worker; //自动加载 require __DIR__ . '/../vendor/autoload.php'; //创建一个Worker监听127.0.0.1:8000, 使用websocket协议通讯 $ws_worker = new ...
  • gateway-workman

    2015-08-20 19:33:00
    最外层start.php,设置全局启动模式,加载Application里的个子服务目录下应用的启动文件(start开头,这些文件都是workman\work类的子类,在载入文件的同时,这些子服务会生成对象,work类的构造方法会把生成的work...
  • 1、去阿里云的安全规则增加2个端口,这两个端口是workman里面配置的 2、去宝塔开放4435端口; 3、到api文件夹下执行:php think worker:gateway start 4、后台常驻:php think worker:gateway -d 5、重启...
  • workman-源码

    2021-03-08 15:35:36
    GatewayWorker Windows版本 GatewayWorker基于开发的一个项目框架,用于快速开发长连接应用程序,例如app推送服务端,即时IM服务端,游戏服务端,物联网,智能家居等。 网关进程负责维持客户端连接,并转发客户端的...
  • 2.workman使用起来分成3个部分,其一:后端服务器,其二:web客户端或者app,其三:gatewayWorker服务器 3.首先需要下载gatewayWorker的dome。(官网或者百度网盘)并运行。如果其中demo里面的Applications\YourA.....
  • workman使用和网络映射

    2017-12-25 21:40:59
    在php中利用workman进行socket编程,基础环境:ubuntu系统、bitnami lamp环境bitnami-lampstack-5.6.30-2-linux-x64通过curl -Ss http://www.workerman.net/check.php | php检查软件环境是否满足workman运行标准显示...
  • Workman使用记录----

    2019-10-13 19:28:27
    记自己使用workman遇到的问题和如何解决 官方文档:http://doc3.workerman.net/640361 thinkphp文档: 5.0:https://www.kancloud.cn/manual/thinkphp5/235128 5.1:...
  • 基于thinkphp 5.1 + workman + gateway 实现简单的在线客服聊天系统
  • (已弃坑)如何编写一台Web服务器程序——WorkerMan源码剖析 我之前看过很多代码,这是第一份让我没法改的程序 -题记 ... 从WebServer说起 WorkerMan的二进制中提供了一个基础的Web服务器示例,我们的源码分析,也从这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,216
精华内容 886
关键字:

workman