后端
文章平均质量分 70
小卡车7号
加油吧。如梦幻泡影,如电亦如露啊。
展开
-
graphql入门使用-构建查询
书接上回在想接下来是先学习查询还是服务端开发时,我陷入了沉思。不想这个沉思持续了近5个月,本以为无法结束时,却在金秋十月迎来了转机。我发现更好的方式是两者结合在一起:先个服务端graphql接口,接着就这个接口的查询。ok,开始吧。环境准备服务端服务端使用js来写,使用的web框架是express,用到了express-graphql和graphql。为了便于调试,我们使用nodemon来运行。服务端的参考代码:https://github.com/warshipJian/express-g原创 2021-10-03 20:24:39 · 895 阅读 · 0 评论 -
graphql入门使用-查询
前言本篇文章可能稍微长了一点,您需要先准备好时间,以免中途要去上厕所什么的,发生中断。我们一般都是用REST API, 即后端定义好API的数据结构和参数,前端再传参请求获取数据。比如我们有个获取用户列表的接口:GET /user/list, 返回用户id,用户名,创建时间:[ { "id": 1, "name": "jack", "created_at": "2021-05-10 13:14:15" }, { "id": 2,原创 2021-05-17 00:18:39 · 1452 阅读 · 0 评论 -
解决laravel框架在腾讯云 Serverless Framework 中439错误 Process exited before completing request问题
有时用composer更新了第三方库后,访问接口报错如下:{ errorCode: 1, errorMessage: "Process exited before completing request", statusCode: 439,}查看文档看不到什么的,可以去云函数后台看日志,会看到报错如下:START RequestId:4e3bae45f7b3af3aa133dcf14dd57d57Fatal error: Composer detected issues in your p原创 2021-03-17 20:47:52 · 1028 阅读 · 0 评论 -
用go写一个docker(5)-linux的namespace(下)
上篇我们用go语言体验了namespace,今天了解下namespace的实现。namespace的目的是资源隔离,即资源都在,但不能让你看到。比如进程a只属于namespace A,则不能让a看到namespace B的资源,除非把a拉到namespace B中。namespace隔离的资源有:系统的hostname网络资源(网卡信息,路由信息等)进程信息(有哪些进程,父进程子进程间的关系等)用户信息(有哪些用户,组,用户的权限是什么)文件系统信息(有什么可用的文件系统等)等等...那原创 2021-01-11 12:05:12 · 520 阅读 · 0 评论 -
用go写一个docker(4)-linux的namespace(上)
温馨提示:之后环境使用的系统如无特殊说明,都是用Linux,代码要在Linux上跑,在Windows或macos上是跑不起来的。这里使用的内核是4.15.0-88-generic,系统是Ubuntu 18.04。Namespace 是Linux提供的一种内核级别隔离机制,目前提供的能力如下:名称标识符隔离资源CgroupCLONE_NEWCGROUPcgroup根目录IpcCLONE_NEWIPCSystem V IPC(信号量、消息队列和共享内存)和POSIX m原创 2021-01-03 23:02:40 · 469 阅读 · 0 评论 -
用go写一个docker(3)-linux的proc
proc是虚拟文件系统,放在内存里面。root@xxg_txy:~# ls /proc/1 1114 13 15 18922 22 27 30153 35 435 78 8638 consoles interrupts kpageflags partitions sysvipc10 1130 1303 16 18923 22846 270 3020 36原创 2020-12-27 22:56:55 · 283 阅读 · 0 评论 -
用go写一个docker(2)-go的Goroutine和通道
如果熟悉go的话请关掉这篇文章,不用往下读了。并发和并行并发强调的是可同时做多个事情(非阻塞),并行强调的是同一时间内多个事情同时进行。可以用CPU多核来理解:在单核CPU中,系统是可并发的,我们可以在打开浏览器的同时打开播放器听歌。CPU分了很多时间片,轮流给各进程使用,这些进程“看起来像”同时运行,但同一时间内只有一个时间片。而要并行的话则必须要多核CPU,因为并行强调的是同一时间内多个进程同时运行,即同一时间内要多个时间片。简而言之:单核CPU的并行能力是0,N核CPU的并行能力是N。阻塞和非原创 2020-12-14 16:07:35 · 226 阅读 · 0 评论 -
go使用第三方包和本地包
前言go之前对第三方包的管理不上心,其他语言比如python有pip,nodejs有npm,而go却没有一个官方的管理工具。在go 1.11之前,开发者需要要关注GOPATH环境变量,这对于开发者来说不友好。经过几次变更后,go于1.12版本开始正式使用go Module,go终于有了一个官方的处理方式,开发者也可以抛弃GOPATH了。本次使用的go版本为1.15.6,建议使用1.13或以上的版本,旧的方式就不要再关注了,让它随风而去吧。go version go1.15.6 darwin/amd原创 2020-12-10 16:58:15 · 10342 阅读 · 2 评论 -
用go写一个docker(1)-go的类型、变量、切片、字典、控制流程、函数、指针、结构体、方法和接口
如果熟悉go的话请关掉这篇文章,不用往下读了。安装go如果电脑上没装go,参考这篇文章安装:https://golang.org/doc/install类型高级语言分静态类型和动态类型。比如PHP,JavaScript是动态类型,go是静态类型。go的基本数据类型有:布尔、整形、浮点型、字符串、数组package mainimport ( "fmt" "reflect")func main() { // 布尔类型 a := true fmt.P原创 2020-12-08 11:27:31 · 200 阅读 · 0 评论 -
PHP8.0正式版的编译安装与使用
2020-11-26发布了PHP8.0的正式版介绍下它的安装,并使用laravel对比下PHP7安装与配置本次使用的操作系统Ubuntu 18.04.4 LTS安装1.准备必要库apt-get install -y autoconf libxml2-dev libsqlite3-dev \libcurl4-openssl-dev libssl-dev libonig-dev libtidy-dev zlib1g-dev2.去官网下载8.0正式版 https://www.php.net/.原创 2020-11-27 23:12:30 · 10122 阅读 · 1 评论 -
浅谈CORS跨域问题
前言在web开发中,有时会遇到如下错误:Access to XMLHttpRequest has been blocked by cors policy这个错误经常出现在新项目刚开始的时候,处理的方式一般有两种:1. 在浏览器上装个跨域插件或跑个本地代理,适用于本地调试。2. 调整服务端配置,从根本上解决。这是个老生常谈的跨域问题,今天我们来重新认识一下。什么是跨域一个URL的组成可以简化为四部分:协议,域名,端口号,路径。格式为:协议://域名:端口号/路径。比如地址: http原创 2020-11-24 18:34:47 · 1058 阅读 · 2 评论 -
laravel admin-03-验证码和防XSS攻击
一.验证码有个现成的库:https://github.com/Iamtong/laravel-admin-login-check-safe 直接拿来用吧。安装一下composer require iamtong/laravel-admin-login-check-safephp artisan vendor:publish --provider=Encore\LoginCheckSafe\LoginCheckSafeServiceProvider根据需求修改配置文件config/admin.p原创 2020-07-31 15:01:35 · 563 阅读 · 0 评论 -
laravel admin-02-数据导出
默认的csv导出有中文乱码的问题,需修改一下CsvExporter.php文件打开 vendor/encore/laravel-admin/src/Grid/Exporters/CsvExporter.php在public function export() 的$headers后面添加print(chr(0xEF).chr(0xBB).chr(0xBF));但还是不太方便,改为用laravel-excel吧一.安装对于laravel5.6及以上的,直接composer安装即可compose原创 2020-07-28 18:04:21 · 861 阅读 · 0 评论 -
laravel admin-01-按钮隐藏
laravel admin提供了模板化的管理后台,可以让后端在10分钟内就做出一个管理后台,非常的方便。优点:自带角色,权限管理,无需再做一套权限管理系统丰富的字段类型,无需另外去写相关的样式和交互基于laravel开发,可以说是没有学习成本了当然,不吹不黑,有一说一。作为一个已经迭代多年的框架,UI和交互方面显得不是那么的fasion,用它来处理一些定制化多的场景时,开发起来也比较繁琐。一.安装和入门认真学习的同学应该发现了,这些在小学二年级的时候学过了,所以安装和入门使用就不赘述了,原创 2020-07-27 21:20:06 · 437 阅读 · 0 评论 -
一次小并发的上线复盘
由于有的人喜欢说高并发,百万并发,所以这个2万并发的项目就叫小并发吧。开发阶段之前给客户A做过一个活动,当时说活动会有1万并发,我们做了大量的优化和准备,结果上线后并发只有2千多,这个数据让我们觉得客户A喜欢吹牛。几个月后客户A又找过来,说要做一个新的活动,称这个活动会有2万的并发。由于之前的"经验",我们觉得顶多也就3千多吧,于是开发时就比较放飞。比如核心字段用TEXT,取全表数据来排名,用了大量的MySQL等等,这些设计给后面的上线埋下了小地雷。在上线前做了几次压测,压测目标2万,结果也还行,错原创 2020-05-19 10:35:23 · 297 阅读 · 0 评论 -
关于并发,QPS和TPS
并发有时候我们醉心于业务逻辑的书写,可能忽视了并发,这里鄙人斗胆说一下对并发的理解,如果错了请指正。在web开发中,并发指的是某个时间单位内对服务器产生的请求数,一般指1秒内产生的会话请求。比如我们说1千并发就是指1秒内有1000请求发送到web服务器。值得注意的是并发数和会话数是不同的,并发是一定会对服务器产生压力的,而会话数可能只是‘挂’在服务器上,并没有查询数据库等操作。比如我们说秒杀场景并发高,是由于在那几秒内要完成下单,库存扣减等操作,这些操作会对服务器,数据库等产生巨大的压力。而要做一个大流原创 2020-05-18 14:34:36 · 1489 阅读 · 0 评论 -
在koa中调用微信图片检测接口
需求: 写个接口给前端,前端传图片给你,然后你调用下微信的接口 https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN。第一眼看到,感觉就是很普通的一个简单的,直接用axios即可,代码类似如下:const accessToken = await wxUtil.getMPAccessToken();const...原创 2020-03-06 23:29:05 · 777 阅读 · 0 评论 -
K8s Ingress 支持socket.io多实例
socket.io 多实例间通信在实际工程中不会只用一个node实例,用户多的时候会需要开多个node实例。这些实例间的通信可以用redis适配器来实现,socket.io官方有个现有的封装socket.io-redis,它是利用redis的发布订阅模式来实现的,使用示例如下:const redisAdapter = require('socket.io-redis');var redis_...原创 2020-01-05 21:11:19 · 2103 阅读 · 0 评论 -
使用faketime修改docker内的时间,解决date: cannot set date: Operation not permitted问题
docker本质是个进程,有很多资源是使用宿主机的,比如系统时间。正常使用时是会觉得很方便,但涉及到对系统资源的修改时,就比较麻烦了。场景使用docker部署了一个后端服务,测试需要改系统时间,如果直接改宿主机时间则会影响到其他的docker(不管是在宿主机上改还是通过–cap-add SYS_TIME参数在docker中修改)。有没有什么既能满足测试要求又不影响其他docker的方法呢?答案...原创 2019-08-25 23:46:47 · 11945 阅读 · 0 评论 -
支付宝和微信的服务端签名-PHP
这两天做了下APP支付接入的服务端签名,记下流水账,总结下。一.支付流程简单归纳下主要流程,详细请看微信和支付宝的开发文档 二.资料准备支付宝1.登录https://open.alipay.com/platform/manageHome.htm,创建一个应用,设置好自己的私钥和公钥 2.将该应用上线,签约其中的APP支付功能。为了便于测试,将 手机网站支付,电脑网站支...原创 2018-06-30 14:51:24 · 710 阅读 · 0 评论 -
搭建ngrok服务
这两天做了下支付功能,回调地址需要固定ip或域名,每次都去服务器调略麻烦,便用ngrok将本机暴露在公网,实现本地调试的目的。准备配件一台有公网ip的服务器一个可用的域名服务器配置这里服务器的系统用的是centos 7 对外开放80,443,4443端口域名配置将该域名的一个子域名解析到这台服务器比如域名为test.com,可以将ngrok.test.com解析到该服...转载 2018-06-28 22:46:52 · 791 阅读 · 0 评论 -
redis 2 用redis来做锁
在很多的业务场景中对数据的处理都会涉及到锁,常用的方案有基于 DB 的唯一索引。基于 ZK 的临时有序节点。基于 Redis 的 NX EX 参数。这次用redis和PHP来做个锁,为了方便说明,统一以多进程的场景做例子。一.思路上锁说到redis锁,首先想到的是用setex来做,比如某个进程先上一把锁127.0.0.1:6379> setnx lock 1(i...原创 2018-08-09 16:26:17 · 331 阅读 · 0 评论 -
redis 3 消息队列
现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。 本次用swoole + redis 来模拟个消息推送系统。思路 1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来...原创 2018-08-11 11:08:16 · 770 阅读 · 0 评论 -
redis 4 位图Bitmaps
如果对补码不是很熟悉,建议先复习下:原码,反码,补码,有符号数和无符号数一般知道前面介绍的五种redis数据结构,就可以开心的玩耍了,但如果知道Bitmaps,Hyperloglogs,GEO,就更开心了。简介假设一个场景:记录用户的签到天数。 方法一:将用户的id和日期关联起来,做个key,比如用户007在2018/08/14这天的签到情况,设置个key:sign_2018_0...原创 2018-08-14 22:34:13 · 347 阅读 · 0 评论 -
redis 1 常用操作
如今是8012年了,作为一个老牌的缓存数据库redis,依然非常强劲。我准备把它系统地过一遍,计划分两部分来进行: 1.redis使用 2.redis原理分析redis通识命令 这些是通用命令,对所有redis的数据结构都可以操作expire 设置过期时间del 删除键值操作结果 正常操作返回OK 或 (integer) 加数字 更新操作返回(integer) 0 空...原创 2018-08-08 15:50:21 · 321 阅读 · 0 评论 -
redis 5 HyperLogLog 布隆过滤器 GeoHash 和 scan
空闲的时候可以用root登录服务器,玩下左轮手枪[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Clicks"这次我们一起来看下redis的HyperLogLog,布隆过滤器,GeoHash 和 scan。HyperLogLog先看个场景:统计网站中每个页面的UV,分每天,每周,每月。 由于UV和PV不同,UV要去重...原创 2018-08-16 22:47:15 · 1225 阅读 · 0 评论 -
redis 6 通信协议RESP
简介redis的通信协议是Redis Serialization Protocol,简称RESP,有如下特性:是二进制安全的在TCP层基于请求-响应的模式需注意的是:RESP是redis客户端和服务端通信的协议,节点交互不使用这个协议。RESP描述RESP有五种最小的单元类型,单元结束时统一加上回车换行符号\r\n。单行字符串 以 + 符号开头。多行字符串 以 $...原创 2018-08-27 10:02:35 · 2098 阅读 · 2 评论 -
redis 7 事件处理
在redis-cli中输入set key hello 回车后,redis服务端发生了什么?这次我们就一起来看看。 本次使用的redis源码版本为:3.0.0了解两个问题,两个概念1 redis是单线程的?redis对数据事件的处理是单线程的,但它也有其他的线程,比如用于同步的,用于持久化的。2 redis为什么那么快?(1). redis的数据处理都是在内存里进行。 (2)...转载 2018-09-09 21:02:35 · 414 阅读 · 0 评论 -
redis 8 做个秒杀系统
秒杀的要点对流量进行控制,逐步减少流量,使得最终到接口的流量是较小的。(流量控制不是说不要用户访问,而是对流量进行引导,保证有效请求的最大化)尽量不要用锁,锁就意味着资源的内耗整个过程可以分秒杀前,秒杀时,秒杀后三个步骤来思考,每一步都独立解耦出来。秒杀前对流量进行控制,秒杀时快速结束战斗,并且不超卖,订单处理,库存扣减可以放到秒杀后处理。流量控制从用户点击秒杀到最终请求下单接...原创 2018-09-12 22:53:24 · 417 阅读 · 0 评论 -
我用easyswoole v2做了一个http服务
在我看来,swoole的优点是性能高,可定制性强,应用场景广(支持http服务,socket服务,或者自己手撸个tcp服务)。但对于日常使用TP或laravel这类框架的开发者来说说,使用原生的swoole框架来做开发并不是很方便,于是产生了很多以swoole为核心的swoole框架,如easyswoole,Swoft ,SwooleDistributed 等,具体介绍可以看swoole的衍生开源...原创 2018-11-28 22:59:40 · 3132 阅读 · 0 评论 -
内网部署yapi
之前用swagger来做api文档,但有的同学不喜欢在接口中写swagger的代码,于是便决定试试yapi。但需要注意的是:不管是yapi还是swagger,都要自己去增加api配置的相关信息,只是配置方式不一样。部署文档:https://yapi.ymfe.org/devops/index.html本次机器的环境是:Ubuntu 16.04 ,未安装其他工具。环境准备需要node,mon...原创 2018-12-03 16:31:19 · 3281 阅读 · 1 评论 -
解决dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
今天安装了下node,发下PHP不能用了,提示dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib Referenced from: /usr/local/opt/php@7.1/bin/php Reason: image not found[1] 2308 abort php检...原创 2019-01-02 15:03:05 · 14922 阅读 · 0 评论 -
阶段性总结-vim的使用
常用进入编辑模式i: 直接当前光标进入o(小写字母o): 另起一空行进入命令行模式复制与剪切yy: 复制数字n+yy: 复制从当前行往下数的n行。比如14yy, 复制14行dd: 剪切数字n+dd: 剪切从当前行往下数的n行。比如5dd, 剪切5行查找/ + 字符: 查找字符,比如 /word ,查找字符word? + 字符: 查找字符,比如 ?word ,查找字符wo...原创 2019-01-20 21:49:31 · 160 阅读 · 0 评论 -
用手机爬微信公众号文章
引子刚开始爬公众号时,我的思路是去搜狗微信上爬(https://weixin.sogou.com),用的是https://github.com/Chyroc/WechatSogou。此方法的优点是代码都在服务器上运行,可批量扩展。但缺点很明显:你至少需要一个稳定的代理,一个一直有新鲜ip的地址池,一个打码平台,当然这些都不重要,重要的是这些都要花银子。这时你发现身边有个安卓手机,上面落满了灰...原创 2019-01-28 16:18:39 · 886 阅读 · 1 评论 -
在laravel中集成swagger
swagger是非常好用的一个API文档工具,大大地减轻了前端和后端的沟通成本。在写后端接口的时候,也可以用它来测试接口,非常方便。 整个过程如下。新建一个laravel项目composer create-project --prefer-dist laravel/laravel Blog集成Swagger获取darkaonline/l5-swaggerc...原创 2018-02-18 14:25:19 · 4112 阅读 · 2 评论