swoole 同步task

<?php
  $serv = new swoole_server("0.0.0.0",9508);
  $serv->set(['worker_num'=>1,'task_worker_num'=>5]);
  functiononReceive($serv,$fd,$from_id,$data)
  {
  $sql = $data;
  $result = $serv->taskwait($sql);
  if($result!==false){
  $serv->send($fd,$result."\n");
  }else{
  $serv->send($fd,"Err:Task timeout\n");
  }
  //异步的时候就麻烦了,需要把$fd传递到onFinish,才能send数据到
  //$serv->task($sql);
  }
  /**
  * task保持数据库连接
  * 使用静态变量,因为变量没有释放,所以才能保持连接
  * mysql连接的数量= task_worker_num
  */
  functiononTask($serv,$fd,$from_id,$sql)
  {
  static$conn=null;
  if($conn==null){
  $conn = mysqli_connect('127.0.0.1','root','123456','help');
  if(!$conn){
  $conn = null;
  $serv->finish('ERR:'.mysqli_connect_error());
  return;
  }
  }
  $result = $conn->query($sql);
  if(!$result){
  $serv->finish('ERR:'.mysqli_error($conn));
  return;
  }
  $data = $result->fetch_all(MYSQLI_ASSOC);
  $serv->finish('OK:'.serialize($data));
  }
  functiononFinish($serv,$task_id,$data)
  {
  // 异步Task时有效
  echo"AsyncTask Finish:Connect.PID=".posix_getpid().PHP_EOL;
  }
  $serv->on('Receive','onReceive');
  $serv->on('Task','onTask');
  $serv->on('Finish','onFinish');
  $serv->start();
 
  //以下是客户端代码
  //$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞
  //$client->connect('172.18.107.194', 9508, 0.5, 0);
  //$client->send("show tables");
  //$data = $client->recv();
 
  /**
  * 查看mysql连接
  *
  * 1. mysql -uroot -p123456
  * 2. show status;
  * 其中的
  * Threads_connected | 1
  * 就是mysql连接数
  */

https://wiki.swoole.com/wiki/page/560.html

http://rango.swoole.com/archives/category/php_swoole/page/2

http://git.oschina.net/swoole/swoole_framework/blob/master/libs/Swoole/Async/MySQL.php

http://www.jb51.net/article/110702.htm

https://wiki.swoole.com/wiki/page/145.html

https://wiki.swoole.com/wiki/search/?q=+%24serv-%3Etaskwait

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值