简单记录一下, workman基础
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/9/19 * Time: 11:36 */ use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('tcp://0.0.0.0:8686'); $worker->count = 4; //启动四个进程 //设置当前Worker实例的名称,方便运行status命令时识别进程。不设置时默认为none。 $worker->name = "myName"; // 设置实例的运行用户 $worker->user = "root"; // 设置此实例收到reload信号后是否reload重启 $worker->reloadable = false; // 此属性为全局静态属性,表示是否以daemon(守护进程)方式运行 Worker::$daemonize = true; //此属性为全局静态属性,如果以守护进程方式(-d启动)运行,则所有向终端的输出(echo var_dump等)都会被重定向到stdoutFile指定的文件中。 //如果不设置,并且是以守护进程方式运行,则所有终端输出全部重定向到/dev/null // 所有的打印输出全部保存在/tmp/stdout.log文件中 Worker::$stdoutFile = '/tmp/stdout.log'; //用来指定workerman日志文件位置 Worker::$logFile = '/tmp/workerman.log'; // 此属性中存储了当前进程的所有的客户端连接,这在广播时非常有用。 $worker->connections; //当这个进程启动后,打印当前的id编号 $worker->onWorkerStart = function($worker){ if($worker->id === 1){ \Workerman\Lib\Timer::add(10,function()use($worker){ // 遍历当前进程所有的客户端连接 foreach($worker->connections as $connection) { //发送当前服务器的时间 $connection->send(time()); } echo "这是定时器设置的内容"; }); }else{ echo "worker的id是$worker"; } }; $worker->onMessage = function($connection, $data) { $connection->send("hello"); }; //设置Worker启动时的回调函数,即当Worker启动后立即执行Worker::onWorkerStart成员指定的回调函数 $worker->onWorkerStart = function($worker){ #some code }; // onWorkerReload 设置Worker收到reload信号后执行的回调。 // onWorkerStop 设置Workert停止时的回调函数,即当Worker收到stop信号后执行Worker::onWorkerStop指定的回调函数 //当连接建立时触发的回调函数。每个连接只会触发一次onConnect回调 $worker->onConnect = function($connection) { echo "new connection from ip " . $connection->getRemoteIp() . "\n"; }; //客户端连接上发来的数据,如果Worker指定了协议,则$data是对应协议decode(解码)了的数据 $worker->onMessage = function($connection, $data) { var_dump($data); $connection->send('receive success'); }; //当连接断开时触发的回调函数 $worker->onClose = function($connection) { echo "connection closed\n"; }; /* $connection->id; 连接的id。这是一个自增的整数。 $connection->protocol = 'Workerman\\Protocols\\Http'; //设置当前连接的协议类 接口类: $connection->send("hello\n"); 向客户端发送数据 true 表示发送成功 null 表示放入待发送队列,等待异步发送 false 表示发送失败,失败原因可能是客户端连接已经关闭,或者该连接的应用层发送缓冲区已满 $connection->getRemoteIp(); //获得该连接的客户端ip $connection->close("hello\n"); 安全的关闭连接. 调用close会等待发送缓冲区的数据发送完毕后才关闭连接,并触发连接的onClose回调。 $worker->onMessage = function($connection, $data) { $connection->close("hello\n"); }; $connection->destroy(); //立刻关闭连接。 // 当连接的应用层发送缓冲区数据全部发送完毕时触发 $worker->onBufferFull = function($connection) { echo "bufferFull and do not send again\n"; }; // onBufferFull 当连接的应用层发送缓冲区满时触发 $worker->onBufferFull = function($connection) { echo "bufferFull and do not send again\n"; }; $worker->onBufferDrain = function($connection) { echo "buffer drain and continue send\n"; }; // 当客户端的连接上发生错误时触发。 $worker->onError = function($connection, $code, $msg) { echo "error $code $msg\n"; }; // 运行worker Worker::runAll(); |