拥有php标签的文章

【swoole.2.04】多进程示例:使用swoole实现多进程处理费时任务--弹性伸缩子程序

回顾上一篇解决了回复僵尸进程的问题,但是在现实环境中,昂贵的服务器不会允许我们一直起多个worker进行处理,这里来解决一下怎么弹性伸缩worker。这里以消息队列中的待消费消息为例,当然也可以以其他指标为例,如cpu利用率,内存利用率等。 代码```phpclass Job{ protected $masterPid; protected $workerNumber = 2; protected $maxWorkerNumber = 10;
阅读全文

【swoole.2.03】多进程示例:使用swoole实现多进程处理费时任务--处理未回收的僵尸子进程

回顾上一篇实现了一个简单的多进程结构,但是当主进程退出时子进程并不会回收,会变成僵尸进程常驻在系统中浪费系统资源。那么现在来解决这个问题 代码```phpclass Job{ protected $masterPid; protected $workerNumber = 4; protected $queueKey = 1; protected $queueMod = 2 | \Swoole\Process::IPC_NOWAI
阅读全文

【swoole.2.01】多进程,多线程和协程

  • 龚学鹏
  • 2019-02-26 12:07:02
  • PHP
  • php
前言在体验swoole的协程功能之前,需要先知道多进程,多线程和协程的区别。 多进程典型的多进程结构就是耳熟能详的masterworker结构。swoole本身也是由mastermanegerworker(task)组成的多进程结构。多进程将多个任务分配到不同的cpu上,从而实现同一时刻,处理多个任务。适用于cpu集型场景。1. 创建:fork创建子进程1. 通信:IPC进程间通信1. 开销:创建进程开销是非常大的1. 并发:并发能力在多进程,多线程和协程之间
阅读全文

【swoole.1.05】swoole粘包问题解决及一些牢骚

时隔一个月我又更新了!上一篇讲到了tcp协议中会碰到的粘包问题及解决思路,即增加包头和增加结束符。这一篇来介绍下通过配置swoole设置选项来达到解决粘包的效果。处理粘包很简单,修改一下服务的配置就行了,详情自行查看文档吧。打开EOF检测:启用EOF自动分包:设置EOF字符串:打开包长检测特性:至于为什么这次更新内容这么简单,请看下面的牢骚吧。 发牢骚中有一个月没更新了,主要是最近有几个朋友和前同事在看了我的博客后觉得博客内容太基础了,包括几
阅读全文

【设计模式】AD-原型模式(Prototype)

前言原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。php中底层已实现`__clone()`魔术方法,不需要其他操作即可进行对象的克隆。 使用场景在原型实例化需要使用大量资源的情况下,new一个类的实例是很浪费的行为,而有的时候我们又需要多个实例对应用进行服务。此时可以直接使用`clone $obj`来进行原型复制,跳过复杂的实例化和配置行为。 实现方法可直接使用php魔术方法`__clone(
阅读全文

【设计模式】AC-工厂模式(Factory Pattern)

前言工厂模式可以通过一个工厂类生产出所需要的对象,这样的好处是1. 在你需要修改需要实例化的类的时候不需要修改外部实例化的代码1. 在需要通过判断来实例化类的时候不需要写大量的ifelse或者switch 应用场景1. 大部分同样功能实例化可能会切换的类的时候都可以用到,如:已编写一个自己的Log类,外部已经多处引用,此时迭代了一个更好的Log类但是不想改变外部代码,可直接在工厂类中生产新的Log类。1. 可能通过配置切换不同对象来进行后续操作,如:平台支
阅读全文

【设计模式】AA-说明

简介此篇将记录本人学习设计模式的全过程。全部学习来自以下文章:将会使用涉及到的设计模式来重构一个简单的日志记录demo,本篇先放出最原始的日志demo。为了方便工厂,适配,桥接等多模型设计模式,此处有2个demo:FileLog和CliLog。FileLog:```php<?phpnamespace Demo\AADemo\Classes;class FileLog{ public function l
阅读全文

【swoole.1.04】udp协议通信和粘包问题

一、udp协议通信之前所使用的客户端都是tcp协议通信,swoole在支持tcp协议的同时还支持udp协议通信。 udp服务端和客户端由于udp协议的特性,udp服务端和客户端创建比较简单服务器创建请查看文档:```php//创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_
阅读全文

【swoole.1.03】异步客户端,心跳检测和心跳包

一、异步客户端在上一篇中我体验了一下swoole的基础客户端和服务端间的交互,其中客户端是最基础的同步客户端,即客户端的一整套连接到服务器向服务器发送数据从服务器接收数据关闭连接行为都是同步阻塞执行的,这样不就失去了socket开发的意义了吗?今天我就体验一下使用swoole创建异步客户端并进行交互。注意:由于我本地的swoole版本为4.2.13,而从4.4.8版本开始,移除了对异步回调的支持,迁移至extasync扩展中,独立为Swoole\Async\Client类,所以新版的用户
阅读全文

【swoole.1.02】初体验

一、什么是socket编程 1.socket编程和web编程的区别1.数据传输方式所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协议。socket处于网络协议的传输层。udp协议:广播式数据传输,不进行数据验证tcp协议:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流。socket传输的特点:优点1. 传输数据为字节级,传输数据可自定义,数据量小(对
阅读全文