EasySwoole之链路追踪

什么是链路追踪 链路追踪一般常用于分布式架构中,当实现一个功能的同时,可能会依次调用多个接口,那么此时这一些列的接口调用,称为调用链。想要实现调用链,那么就需要对每次调用的链接进行标识也就是pointId,方便出现调用问题的时候排查问题,但是有调用并不是同级,所以还需要用parentId来标识上下级关系。具体请查看链接 EasySwoole中实现Api链路追踪 安装组件 `composer require easyswoole/tracker` onRequest事件(
阅读全文

php的垃圾回收机制

  • 仙士可
  • 2020-01-19 11:02:58
  • PHP
  • php
在平时phpfpm的时候,可能很少人注意php的变量回收,但是到swoole常驻内存开发后,就不得不重视这个了,因为在常驻内存下,如果不了解变量回收机制,可能就会出现内存泄露的问题,本文将一步步带你了解php的垃圾回收机制,让你写出的代码不再内存泄漏 写时复制首先,php的变量复制用的是写时复制方式,举个例子. ```php$a='仙士可'.time();$b=$a;$c=$a;//这个时候内存占用相同,$b,$c都将指向$a的内存,无需额外占用 $b='仙
阅读全文

原生workman实现消息推送

原生workman实现及时消息推送 需求: 共享单车关闭后,会通过设置的url,进行回调,发送数据。那么相对于共享单车关锁来说,回调给url的数据,对于客户端来说是异步操作,那么如何使回调变成同步操作,客户端能立即收到关锁之后的信息呢? 问题: 由于进程之间申请的内存不能共享,所以当你直接调用workman里面封装的方法时,会无法拿到数据。所以好多人就会出现,在回调里面调用推送的方法,提示 `未定义方法或方法不存在`的情况 workman 代码: ```
阅读全文

地理位置计算之geohash算法

地理位置距离实现目标:最近在做共享单车单车的项目,用户打开APP后,如果根据当前的经纬度坐标获取附近的车辆呢? 特点: geohash用一个字符串表示经度和纬度两个坐标(可以加索引) geohash表示的并不是一个点,而是一个矩形区域 geohash编码的前缀可以表示更大的区域。 原理: geohash算法将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 通过对
阅读全文

TP5.1中导入Excel表到数据库

  • 北溟有鱼QAQ(LuffyQAQ)
  • 2020-01-02 15:33:45
  • PHP
  • php mysql
TP5.1中利用Excel库导入数据到mysql1. 利用composer下载类库 `composer require phpoffice/phpspreadsheet`1. 找到源码在vender下面有个最新下载的phpoffice类库,找到samples下面的Basic,查看里面的自带demo1. 自己新建一个xls文档,用来做测试使用,如果所示1. 编写上传程序,此处前端省略(直接看代码里面的注释)```phppublic function upload(Reque
阅读全文

TP中利用workman获取实时数据

  • 北溟有鱼QAQ(LuffyQAQ)
  • 2019-12-12 15:11:50
  • PHP
  • workman
TP5.1中 利用workman获取实时数据更新 最新在项目当中需要实现数据的实时更新,于是利用workman简单的实现了对数据的实时获取。1. 首先下载workman,可以利用composer引入也可以直接下载workman放在项目当中(这里因composer中的workman版本比较低,所以直接下载的最新版本放到的项目当中) 1. 在application下面创建一个websocket文件夹,里面创建一个ws_start.php 用来写websocket相关的业务
阅读全文

Linux下使用yum安装LNMP环境

如何使用yum搭建有需求的LNMP环境本人使用的是centos7系统,就以centos7的系统搭建为例 Nginx安装1. 下载/安装步骤: 2. 创建/编辑文件:`vi /etc/yum.repos.d/nginx.repo` 3. 编辑内容:`OS代表系统 OSRELEASE 代表系统版本号` ```shellname=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearc
阅读全文

swoole如何对ip限制访问频率

swoole如何对ip限制访问频率在我们开发api的过程中,有的时候我们还需要考虑单个用户(ip)访问频率控制,避免被恶意调用。归根到底也就只有两个步骤: 用户访问要统计次数 执行操作逻辑之前要判断次数频率是否过高,过高则不执行 easyswoole中实现Ip访问频率限制本文章举例的是在easyswoole框架中实现的代码,在swoole原生中实现方式是一样的。只要在对应的回调事件做判断拦截处理即可。 使用swoole\Table,储存用户访问情况(也
阅读全文

关于php对象池

  • 仙士可
  • 2019-07-16 23:15:31
  • PHP
  • php
生命周期对象池需要从php的生命周期说起,php的应用大部分都是web网站,而大部分web网站使用的都是cgi模式进行运行的,导致php生命周期跟随着请求结束而结束,从而没有对象池的概念cgi模式的一次请求可以分为以下几步:1. 用户请求1. web服务器(apache,nginx,iis等)接收请求1. 服务器通过cgi协议调用php,运行php文件1. php文件处理逻辑,返回数据,php进程 销毁/回收(该次执行的php变量内存等全部回收)1. web服务器接收数据
阅读全文

PHP自动加载与composer自动加载

当我们编写面向对象的程序时,通常是将类分别放在`不同的文件中`。但这样一来,当我们调用其他类的时候,则需要先手动引入该文件(否则会因为当前程序中没有该类名的类而报错)久而久之加载的列表就会`很混乱复杂`,不方便管理。```php文件A.php<?phpclass A{ public function run(){ echo "这是在A类中的方法"; }}?文件B.php<?phprequire "A.php"; // 在这里
阅读全文