workerman 能在thinkphp的框架上使用吗

 我来答
龙氏风采
2016-09-27 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12816
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部

workerman 能在thinkphp的框架上使用

$Gateway =  new \Org\Util\Gateway('127.0.0.1:5136');

$Gateway->sendToUid(1021,json_encode(array()));

下载workerman, 放入thinkphp,注意与Home平级,就把workerman当做是一个模块。

进入Home/Controller目录,新建WorkermanController.class.php

  • workerman和thinkphp完美结合使用源码

直接上源码,这里我是以守护进程方式运行的,调试的话,可以去掉daemonize = true 这行.


<?php

namespace Admin\Controller;

use Workerman\Worker;

/**

* 用户信息查询

*/

class WorkermanController{

/**

* 用户信息查询

*/

public function index(){

if(!IS_CLI){

die("access illegal");

}

require_once APP_PATH.'Workerman/Autoloader.php';


// 每个进程最多执行1000个请求

define('MAX_REQUEST', 1000);


Worker::$daemonize = true;//以守护进程运行

Worker::$pidFile = '/data/wwwlogs/CMSWorker/workerman.pid';//方便监控WorkerMan进程状态

Worker::$stdoutFile = '/data/wwwlogs/CMSWorker/stdout.log';//输出日志, 如echo,var_dump等

Worker::$logFile = '/data/wwwlogs/CMSWorker/workerman.log';//workerman自身相关的日志,包括启动、停止等,不包含任何业务日志


$worker = new Worker('text://172.16.0.10:10024');

$worker->name = 'CMSWorker';

$worker->count = 2;

//$worker->transport = 'udp';// 使用udp协议,默认TCP


$worker->onWorkerStart = function($worker){

echo "Worker starting...\n";

};

$worker->onMessage = function($connection, $data){

static $request_count = 0;// 已经处理请求数

var_dump($data);

$connection->send("hello");


/*

* 退出当前进程,主进程会立刻重新启动一个全新进程补充上来,从而完成进程重启

*/

if(++$request_count >= MAX_REQUEST){// 如果请求数达到1000

Worker::stopAll();

}

};


$worker->onBufferFull = function($connection){

echo "bufferFull and do not send again\n";

};

$worker->onBufferDrain = function($connection){

echo "buffer drain and continue send\n";

};


$worker->onWorkerStop = function($worker){

echo "Worker stopping...\n";

};


$worker->onError = function($connection, $code, $msg){

echo "error $code $msg\n";

};


// 运行worker

Worker::runAll();

}

}


修改Workerman/Worker.php源码,找到parseCommand()方法,workerman版本3.3.2的话,在586行,修改命令行检测语法:


protected static function parseCommand()

{

global $argv;

// Check argv;

$start_file = $argv[0];

if (!isset($argv[2])) {

exit("Usage: php yourfile.php Controller/Action {start|stop|restart|reload|status|kill}\n");

}


// Get command.

$command = trim($argv[2]);

$command2 = isset($argv[3]) ? $argv[3] : '';

.....

}


OK,此时大功告成。


Linux命令行下运行,注意,此处要切换到thinkphp根目录下面

/usr/local/php/bin/php index.php Workerman/index start


查看运行状态:

/usr/local/php/bin/php index.php Workerman/index status


此处命令行可以放入全局变量中,直接以php运行

胖子阿亚
2016-09-18 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:78.3万
展开全部
可以使用de
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式