zoukankan      html  css  js  c++  java
  • workerman

    • 使用Mysql
    $db = new WorkermanMySQLConnection('host', 'port', 'user', 'password', 'db_name');
    $db->query("SELECT ID,Sex FROM `Persons` WHERE sex='M' AND ID = 1");
    $db->row("SELECT ID,Sex FROM `Persons` WHERE sex='M'"); 一行数据
    $db->column("SELECT `ID` FROM `Persons` WHERE sex='M'"); 一列数据
    $db->single("SELECT ID FROM `Persons` WHERE sex='M'"); 单个值
    $db->beginTrans();事务开始
    $db->commitTrans(); // or $db->rollBackTrans(); 回滚或提交
    其余操作用使用 query即可
    use WorkermanWorker;
    //use WorkermanLibTimer;
    require_once __DIR__ . '/Workerman/Autoloader.php';
    require_once __DIR__ . '/Workerman/Mysql.php';
    $worker = new Worker("http://0.0.0.0:2345");
    // 开启多少个进程运行定时任务,注意业务是否在多进程有并发问题
    $worker->count = 1;
    $worker->onWorkerStart = function($worker)
    {
        global $db;
        $db = new WorkermanMySQLConnection('127.0.0.1', '3306', 'root', 'mysql', 'laravel');
    };
    $worker->onMessage = function($connection, $data)
    {
        // 通过全局变量获得db实例
        global $db;
        // 执行SQL
        $all_tables = $db->query('select * from users');
        $connection->send(dump($all_tables));
    };
    // 运行worker
    Worker::runAll();
    • 定时器加心跳
    require_once __DIR__ . '/Workerman/Autoloader.php';
    use WorkermanWorker;
    use WorkermanLibTimer;
    
    // 心跳间隔55秒
    define('HEARTBEAT_TIME', 55);
    
    $worker = new Worker('text://0.0.0.0:1234');
    
    $worker->onMessage = function($connection, $msg) {
        // 给connection临时设置一个lastMessageTime属性,用来记录上次收到消息的时间
        $connection->lastMessageTime = time();
        // 其它业务逻辑...
    };
    
    // 进程启动后设置一个每秒运行一次的定时器
    $worker->onWorkerStart = function($worker) {
        Timer::add(1, function()use($worker){
            $time_now = time();
            foreach($worker->connections as $connection) {
                // 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
                if (empty($connection->lastMessageTime)) {
                    $connection->lastMessageTime = $time_now;
                    continue;
                }
                // 上次通讯时间间隔大于心跳间隔,则认为客户端已经下线,关闭连接
                if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
                    $connection->close();
                }
            }
        });
    };
    
    Worker::runAll();
    • 定时任务处理队列
    • use WorkermanWorker;
      use WorkermanLibTimer;
      require_once __DIR__ . '/Workerman/Autoloader.php';
      require_once __DIR__ . '/Workerman/Mysql.php';
      $worker = new Worker();
      // 开启多少个进程运行定时任务,注意业务是否在多进程有并发问题
      $worker->count = 4;
      $worker->onWorkerStart = function($worker)
      {   global $db,$redis;
          $db = new WorkermanMySQLConnection('127.0.0.1', '3306', 'root', 'mysql', 'laravel');
          $redis = new Redis();
          $redis->connect('127.0.0.1', 6379);
          if($worker->id == 0)//只在第一个上边使用定时
          {
              Timer::add(5, function(){
                 global $redis;
                  while(true) {
                      $res = $redis->rpop("sendsms");
                      if ($res) {
                          $arr = unserialize($res);//取出队列
                          echo '取出成功'.date("Y-m-d H:i:s")."
      ";
                      } else {
                          return;
                      }
                  }
              });
          }
      };
      // 运行worker
      Worker::runAll();
  • 相关阅读:
    JAVA,统计字符串里面每个字符出现的次数
    JAVA,遍历HashMap的2种方式,keySet方法和entrySet对象
    JAVA,Map接口常用方法
    JAVA,Collection集合常用API和集合特点
    object类常用方法
    [Algorithm] 双指针应用
    [CV]计算机视觉中值变换、拉普拉斯算子、傅里叶变换
    [CNBlogs]使用Typora和MetaWeblog改善博客园书写体验
    [C#] 动态编程表达式树实现NPOI.IROW快速映射优化
    [CV] 计算机视觉像素位变换(反转变换、对数变换,伽马变换,直方图均衡化)
  • 原文地址:https://www.cnblogs.com/yszr/p/14704365.html
Copyright © 2011-2022 走看看