Swoole

swoole 协程

浪尽此生 提交于 2020-01-07 18:58:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> php 协程的使用 异步代码 5秒 <?php $c = 10; while($c--) { echo $c; go(function () { //这里使用 sleep 5 来模拟一个很长的命令 echo "aaa\n"; co::exec("sleep 5"); }); } 同步代码 50秒 <?php $c = 10; while($c--) { echo $c; //这里使用 sleep 5 来模拟一个很长的命令 shell_exec("sleep 5"); } php swooler_co_exec.php php swooler_shell_exec.php 协程chan通道 <?php $chan = new chan(2); # 协程1 go (function () use ($chan) { $result = []; for ($i = 0; $i < 5; $i++) { $result += $chan->pop(); } var_dump($result); }); # 协程2 go(function () use ($chan) { $cli = new Swoole\Coroutine\Http\Client('www.qq.com', 80); $cli->set([

swoole学习笔记之简单的httpServer

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-07 18:47:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> <?php $server=new Swoole\Http\Server('0.0.0.0',9801); $server->set([ 'pack_max_length'=>1024*1024*3, 'upload_tmp_dir'=>__DIR__."/upload",//上传文件的临时保存的地址 'document_root' =>__DIR__, 'enable_static_handler' => true,//配合document_root使用,找静态文件 ]); $server->on('request',function ($request,$response){//给服务绑定事件 $uri = $request->server['request_uri']; if ($uri == '/favicon.ico') { $response->status(404); $response->end(404); } // echo __DIR__."/css"; $response->header("content-type","text/html");//设置头信息 $response->header("charset","utf-8"); $response->cookie('user',

创建websocket服务器

故事扮演 提交于 2020-01-07 16:35:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> swoole从1.7.9版本开始, 内置了websocket服务器功能,我们只需几行简单的PHP代码,就可以创建出一个异步非阻塞多进程的WebSocket服务器。 首先,我们在apache的工作空间下,新建一个项目,名称为swoole,然后在里面新建一个ws-server.php文件,该php文件主要创建一个websocket服务器,同时相应用户的请求,内容如下: <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws_server = new swoole_websocket_server('192.168.1.169', 9502); //设置server运行时的各项参数 $ws_server->set(array( 'daemonize' => true, //是否作为守护进程 )); //监听WebSocket连接打开事件 $ws_server->on('open', function ($ws, $request) { file_put_contents( __DIR__ .'/log.txt' , $request->fd); //$ws->push($request->fd, "Hello, Welcome\n"); }); //监听WebSocket消息事件

swoole学习笔记之多进程注意事项

南楼画角 提交于 2020-01-06 21:07:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 首先,进程之间的内存是相互独立的,不管是有没有亲缘关系的进程。 进程之间的通讯可以通过消息队列,socket,消息中间件等进行实现,swoole内有内置的内存table,相比于其他消息中间件更加高效,不过也有局限性(个人理解,只在于swoole内使用) 之前的文章里比较详细 socket $this->socket=stream_socket_server($socket_address);//socket_address地址如tcp://0.0.0.0:9805 创建socket资源句柄 $clientSocket=stream_socket_accept($this->socket); //阻塞监听 linux消息队列 msg_send($msg_queue,10,"发送的消息"); msg_receive($msg_queue,10,$message_type,1024,$message);//从消息队列中收取消息 阻塞接收 swoole注意事项: 1.对象的生命周期 https://wiki.swoole.com/wiki/page/354.html 程序全局期: 在start之前创建的所有对象,只有在服务停止之后才会结束 进程全局期: 在onworkstart等进程启动事件内创建的对象

IT技术精选公众号_优美代码

ε祈祈猫儿з 提交于 2020-01-06 20:28:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文推荐的公众号主要是大数据,云服务,云原生,高并发的技术.不是编程入门的技术. 精选的公司级别技术团队的公众号,精选的个人公众号. 文章来自 https://my.oschina.net/yiupng/blog/3153740 阿里技术, 阿里巴巴云原生, 阿里巴巴中间件, 百度智能云, CNCF, 金融级分布式架构 支付领域云计算, Fastpay快付 支付领域, 高可用架构 出版书籍<高可用架构>, 架构师之路 58快狗打车的沈剑, 刘超的通俗云计算, 码农翻身, 优美代码 整理发布 , php饭米粒 php技术, 石彬的架构笔记 转发的面试用到的技术相关, 狸猫技术窝 面试用到的技术, 搜云库技术团队, Swoole微课程 php swoole技术, 淘宝技术, TGO鲲鹏会, 张铁蕾, 360技术, 云原生架构师, 有赞coder, 优美代码 整理发布 , 文章来自 https://my.oschina.net/yiupng/blog/3153740 来源: oschina 链接: https://my.oschina.net/yiupng/blog/3153740

swoole学习笔记之task异步进程与消息列队

感情迁移 提交于 2019-12-30 14:53:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 客户端 <?php $client=new swoole\Client(SWOOLE_SOCK_TCP); //发数据 $client->connect('127.0.0.1',9801); $body='213'; $data=pack("N",strlen($body)).$body;//数据打包,包头包体,防止粘包现象 $client->send($data); $client->close(); 服务端 <?php //tcp协议 $server=new Swoole\Server("0.0.0.0",9801); //创建server对象 //include '222xx'; 不能 $key=ftok(__DIR__,1);//得到消息队列的KEY echo $key; $server->set([ 'worker_num'=>1, //设置进程 //'heartbeat_idle_time'=>10,//连接最大的空闲时间 //'heartbeat_check_interval'=>3 //服务器定时检查 'task_worker_num'=>1, //task进程数 'task_ipc_mode'=>2, 'message_queue_key'=>$key,//绑定消息队列key

php和redis怎么实现消息队列

本秂侑毒 提交于 2019-12-30 13:48:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 把瞬间服务器的请求处理换成异步处理,缓解服务器的压力,实现数据顺序排列获取。本文主要和大家分享php和redis如何实现消息队列,希望能帮助到大家。 redis实现消息队列步骤如下: 1).redis函数rpush,lpop 2).建议定时任务入队列 3)创建定时任务出队列 文件:demo.php插入数据到redis队列 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $password = '123456'; $redis->auth($password); $arr = array('h','e','l','l','o','w','o','r','l','d'); foreach($arr as $k=>$v){ $redis->rpush("mylist",$v); } 文件:index.php定时扫描出队列 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $password = '123456'; $redis->auth($password); //list类型出队操作 $value = $redis->lpop('mylist'); if(

快速入门Swoole引擎原理的干货

冷暖自知 提交于 2019-12-27 16:12:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 过去半年使用PHP和Java两种技术栈完成了一个游戏服务器项目。由于项目中有高频的网络请求,所以PHP技术栈尝试使用Swoole引擎(基于事件的高性能异步并行网络通信引擎)来完成部分游戏业务。 Swoole的安装 安装swoole很简单,由于是国人做的项目,很多issue可以在 官网 文档找到答案。安装分两种: 编译安装。直接去github或者gitee去下载官方的发行版,编译安装后,将so拓展写入php.ini文件。 容器安装。swoole引擎应用广泛,所以hub上有很多可用的容器,选择需要的pull一下即可。 Swoole引擎的优势 常驻内存。传统 PHP框架或者单文件,在处理每个请求之前,都要做一遍加载框架文件、配置的操作,请求完成之后会释放所有资源和内存,无须担心内存泄漏。但是如果请求数量上升,并发很高的时候,快速创建资源,又马上释放,会导致 PHP 程序运行效率急剧下降。而使用 Swoole 则没有这个问题:PHP的代码加载到内存后,拥有更长的生命周期,这样建立的数据库连接和其他大的对象,不被释放。每次请求只需要处理很少的代码,而这些代码只在第一次运行时,被 PHP 解析器编译,驻留内存。以后都是直接载入 OPCODE ,让 Zend 引擎直接运行。另外,之前PHP不能实现的,如数据库连接池

swoole 类名映射关系

情到浓时终转凉″ 提交于 2019-12-20 19:13:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 类名映射关系 下划线类名风格 命名空间风格 swoole_server Swoole\Server swoole_client Swoole\Client swoole_process Swoole\Process swoole_timer Swoole\Timer swoole_table Swoole\Table swoole_lock Swoole\Lock swoole_atomic Swoole\Atomic swoole_buffer Swoole\Buffer swoole_redis Swoole\Redis swoole_event Swoole\Event swoole_mysql Swoole\MySQL swoole_mmap Swoole\Mmap swoole_channel Swoole\Channel swoole_serialize Swoole\Serialize swoole_http_server Swoole\Http\Server swoole_http_client Swoole\Http\Client swoole_http_request Swoole\Http\Request swoole_http_response Swoole\Http\Response

Swoole make failed ubuntu16.04

故事扮演 提交于 2019-12-11 15:27:15
问题 I am trying to install SWOOLE on my Ubuntu-16.04 I tried this sudo pecl install swoole But am getting a long list of errors( Skipped some lines ) In file included from /tmp/pear/temp/swoole/php_swoole.h:156:0, from /tmp/pear/temp/swoole/swoole.c:16: /tmp/pear/temp/swoole/php7_wrapper.h: In function 'sw_zend_is_callable': /tmp/pear/temp/swoole/php7_wrapper.h:238:5: error: unknown type name 'zend_string' zend_string *key = NULL; ^ /tmp/pear/temp/swoole/php7_wrapper.h:239:5: warning: passing