WorkermanController.class.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. use Workerman\Worker;
  5. class WorkermanController
  6. {
  7. //Linux命令行下运行,注意,此处要切换到thinkphp根目录下面
  8. // /usr/local/php/bin/php index.php Workerman/index start
  9. //查看运行状态:
  10. // /usr/local/php/bin/php index.php Workerman/index status
  11. public function index()
  12. {
  13. require_once APP_PATH . 'Workerman/Autoloader.php';
  14. // 每个进程最多执行1000个请求
  15. define('MAX_REQUEST', 1000);
  16. Worker::$daemonize = true; // 以守护进程运行
  17. Worker::$pidFile = '/data/wwwlogs/CMSWorker/workerman.pid'; // 方便监控WorkerMan进程状态
  18. Worker::$stdoutFile = '/data/wwwlogs/CMSWorker/stdout.log'; // 输出日志, 如echo,var_dump等
  19. Worker::$logFile = '/data/wwwlogs/CMSWorker/workerman.log'; // workerman自身相关的日志,包括启动、停止等,不包含任何业务日志
  20. $worker = new Worker('text://127.0.0.1:');
  21. $worker->name = 'CMSWorker';
  22. $worker->count = 2;
  23. // $worker->transport = 'udp';// 使用udp协议,默认TCP
  24. $worker->onWorkerStart = function ($worker) {
  25. echo "Worker starting...\n";
  26. };
  27. $worker->onMessage = function ($connection, $data) {
  28. static $request_count = 0; // 已经处理请求数
  29. var_dump($data);
  30. $connection->send("hello");
  31. /*
  32. * 退出当前进程,主进程会立刻重新启动一个全新进程补充上来,从而完成进程重启
  33. */
  34. if (++ $request_count >= MAX_REQUEST) { // 如果请求数达到1000
  35. Worker::stopAll();
  36. }
  37. };
  38. $worker->onBufferFull = function ($connection) {
  39. echo "bufferFull and do not send again\n";
  40. };
  41. $worker->onBufferDrain = function ($connection) {
  42. echo "buffer drain and continue send\n";
  43. };
  44. $worker->onWorkerStop = function ($worker) {
  45. echo "Worker stopping...\n";
  46. };
  47. $worker->onerror = function ($connection, $code, $msg) {
  48. echo "error $code $msg\n";
  49. };
  50. // 运行worker
  51. Worker::runAll();
  52. }
  53. }