12 2019 档案
摘要:现在很多框架使用根目录的.env文件来配置环境变量,php本身是不会去解析这个文件的,需要使用php代码读取和解析这个文件放入环境变量中 例如查看thinkphp中.env文件的加载过程 , 使用下面这个strace命令查看fpm进程stat文件状态的过程 strace $(pidof 'php-f
阅读全文
摘要:官网提示是这样的,对/e修饰符的支持已删除。请改用preg_replace_callback()原因是/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后),会被一句话后门使用 看看smarty中是也是这样用的,也是存在问题$s
阅读全文
摘要:这个问题和curl无法访问https资源是类似的,现在curl可以访问https资源,但是使用pecl安装扩展的时候不行,更新下最新的这个证书就可以了 这个问题就是证书不是最新的,把系统的证书换成最新的就可以了1.需要下载CA证书 文件地址是 wget http://curl.haxx.se/ca/
阅读全文
摘要:容器的集群化管理,有如下这些资源管理器 apache mesos老牌的,推特退出历史舞台 docker swarm资源占用比较低,但是功能有限 k8s 功能全面,非常稳定,靠山是谷歌,10年的容器化基础架构,采用了borg的思想使用go语言从新开发出来的,消耗资源少,弹性伸缩;负载均衡IPVS k8
阅读全文
摘要:比如说要查看所有的sql查询语句,数据库的端口是3306 tcpdump -i any port 3306 -l -s 0 -w -|strings|grep -A 5 select 要查看所有的调用mc资源,端口是50028 tcpdump -i any port 50028 -l -s 0 -w
阅读全文
摘要:当需要有一个全局性的map集合资源进行增删改数据时,需要对该map资源增加读写锁,防止并发时出现安全问题 下面的类就是举例 , 属性中的Conns模拟存储一些资源,对这些资源进行并发的增加数据,使用写锁锁住资源,当读取是使用读锁锁住资源 使用时
阅读全文
摘要:当需要比较A , B两个文件 , A文件中存在 , 并且把也在B文件中存在的行去除掉 , 可以使用这个awk的用法来 awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) delete val[$0]}}END{for(i in val) print i}'
阅读全文
摘要:之前的处理中每一个连接都会创建一个主groutine , 每个连接中的主groutine中创建出读groutine 和写groutine 每个连接处理业务再单独开出一个groutine ,这样如果有10万并发的连接 , 将会出现30万groutine ,其中读写占20万阻塞住的 , 不占用资源。处理
阅读全文
摘要:读写两部分进行一下分离,中间通过chan进行传递数据 ,这样可以方便的在write中进行一些业务处理 single/snet/tcpconn.go 测试代码,使用上面的包: server.go
阅读全文
摘要:审批流类似一个链表 审批流设置表可以配置某个频道的审批层级
阅读全文
摘要:tcp传输的数据是以流的形式传输的,因此就没有办法判断到哪里结束算是自己的一个消息,这样就会出现粘包问题,多个包粘在一起了 可以使用这样一个自定义的形式来解决,一个消息分为 head+body head包括数据的长度和数据编号 , 长度和编号都是uint32类型 也就是32位 占有4个字节 , 总共
阅读全文
摘要:连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80", $errno,$errstr,2); 那个数字是连接超时 ,比如连接google , 2秒就返回错误 , 这样就不会一直等在那了 stream_set_timeou
阅读全文
摘要:在一个应用中经常需要有一个配置文件,可以对代码中的参数进行配置,可以使用一个json文件来对应一个struct的对象,进行全局配置 建一个conf/zinx.json作为配置文件 建一个utils/GlobalObj.go utils包,比如下面这个 func init()函数可以在导包的同时被执行
阅读全文
摘要:go中的继承是使用结构体嵌套实现的,可以继承父类的方法 覆盖和其他面向对象的语言是一样的,函数名,参数,返回类型一致,就可以覆盖父类的方法
阅读全文
摘要:对tcp连接部分以及与连接绑定的业务部分进行抽象和封装 主要是对连接的开启关闭和读写进行封装,抽象出接口,使用回调进行具体业务的绑定 zinterface/iconnection.go znet/connection.go znet/server.go
阅读全文
摘要:当进行业务逻辑开发的时候,经常要进行封装,封装成独立的类文件,在类文件的属性中预留出函数类型的API 在调用该类文件中某些方法的时候,也根据业务需要调用类属性中的函数, 在主业务中可以传递特定的函数注册到属性中,也会被调用到 test.php connection.go是封装的类文件,回调类主模块中
阅读全文
摘要:框架要先把整体的结构定义好,一般都是在$GOPATH目录的src下建立自己的目录 zinterface是一些接口的定义 znet就是接口的具体实现 IServer.go server.go一个tcp服务端的基本业务,简单的原样回显 单独在src下创建测试目录 server.go
阅读全文
摘要:不知道为啥,家里的网访问不了pecl.php.net,这也就没有办法直接使用pecl install swoole安装swoole,也可以直接进行编译安装 在git仓库下载源码 https://github.com/swoole/swoole-src 进入源码目录后 phpize (没有该命令的ap
阅读全文
摘要:swoole提供一个编译好的二进制包,这个包连php都包含进去了,下载解压后就可以直接运行,都不用安装php 在这个地方直接下载二进制包 https://www.swoole.com/page/download 下载完按照官方建议解压缩到/opt/swoole tar -xvf swoole.tar
阅读全文
摘要:直接使用官方子包可以实现websocket协议, golang.org/x/net/websocket 如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/golang.org/x/net就行了 服务端代码: package main import ( "tim
阅读全文
摘要:先要安装event扩展,这样才可以使用libevent的事件机制 pecl install event 测试代码
阅读全文
摘要:1.在测试一个按照时间的范围查询时,尽管增加了索引,发现使用不到索引,可以使用这个来强制使用索引 测试过程为,创建下面的表,以及创建了联合索引 create table delay_delete_users( id int auto_increment, email_id int not null
阅读全文
摘要:1.tcp的客户端,并且直接读取http协议的全部内容,每次读取4096字节,直到最后一个字节是\n并且读取的长度小于4096 conn, err := net.Dial("tcp", "www.baidu.com:80") if err != nil { log.Fatal(err) } _, e
阅读全文
摘要:在配置了环境变量$GOPATH后,比如下面这个路径 export GOPATH=/mnt/f/ubuntu/goProject 在这个路径下面会有这几个目录 在src目录下放着我的源码比如: 在同一个目录下,比如websocket,不需要import,就可以互相调用其它文件的函数,但是在go run
阅读全文
摘要:使用GOPROXY环境变量解决proxy.golang.org无法访问问题 在/etc/profile中增加 export GOPROXY=https://goproxy.cn windows下使用 $env:GOPROXY = "https://goproxy.cn"
阅读全文
摘要:比如首先在/etc/profile里面增加这几个环境变量 export PATH=$PATH:/mnt/f/ubuntu/goProject/go/binexport GOROOT=/mnt/f/ubuntu/goProject/goexport GOPATH=/mnt/f/ubuntu/goPro
阅读全文
摘要:golang定时器与redis结合,每隔1秒ping一下,每隔20秒llen一下队列的长度 package main import ( "fmt" "time" "github.com/go-redis/redis" ) var ( client *redis.Client ) func main(
阅读全文
摘要:golang中的定时器是使用的chanel阻塞来实现的,主要使用到了time包中的内容,如果有多个定时器的channel,为了防止阻塞,可以使用select来获取遍历channel 定时器获取的channel是个单通道channel,只能读不能写,定义时这样来定义var test <-chan in
阅读全文
摘要:路由表用于决定数据包从哪个网口发出,其主要判断依据是目标IP地址Linux路由表其实有2个主要概念:按顺序走路由策略,在路由策略对应的路由表中匹配规则路由策略(rule)路由表(table) 查看所有的路由策略,32766那个策略最有用,对应的main路由表也是默认展示的路由表ip rule lis
阅读全文
摘要:需要先FQ创建一个谷歌账户和创建recaptcha验证的网站域名,获取到两个secrecthttps://www.google.com/recaptcha/admin 前端增加html和js代码,例如 后端增加验证代码,例如:
阅读全文
摘要:SO_REUSEPORT支持多个进程或者线程绑定到同一端口 每个进程可以自己创建socket、bind、listen、accept相同的地址和端口,各自是独立平等的。让多进程监听同一个端口,各个进程中accept socket fd不一样,有新连接建立时,内核只会唤醒一个进程来accept,并且保证
阅读全文
摘要:注册树模式是把对象挂到一个类的属性数组里,下次直接在这个数组里面取,保持全局唯一,一般在项目入口初始化的时候有用到。在workerman中一开始的就是个注册树模式的运用,下面是对他的模拟 在Worker的构造函数中,把当前new的对象挂到了Worker类的静态变量属性数组里,在下次使用的时候直接在那
阅读全文
摘要:在测试mysql的过程中遇到使用localhost可以连接但是127.0.0.1不能连接,原因是localhost使用的本地socket连接,127.0.0.1使用使用的tcp连接 在mysql库的user表中,root账号默认的加密验证方式是auth_socket是,从新使用新的方式生成一下密码加
阅读全文
摘要:默认安装的php不存在pdo扩展,因此在使用到的时候会报错,直接使用这个命令 apt-get install php-mysql 就可以成功安装pdo扩展 安装完数据库后需要导入sql语句,先进入数据库中提前创建数据库名,比如laykefu的数据库,-u -p 数据库名 ,后面跟上sql文件的地址就
阅读全文
摘要:编译用的一些依赖yum install curl-devel expat-devel gettext-devel openssl-devel zlib-develyum install gcc perl-ExtUtils-MakeMakeryum update -y nss curl libcurl
阅读全文
摘要:在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统 在微软商店里搜索ubuntu,直接点击安装就可以了 安装完成后的windows与linux的磁盘映射见下图 配置开发环境,下载和安装vscode,打开后直接让安装一个扩展可以连接子系统的目录 windo
阅读全文
摘要:当设置socket为非阻塞时,fread或者fgets函数会立即返回结果,而不需要等待有输入,测试过程可以使用vscode的debug模式来进行当不设置这一项时,如果客户端没有输入会一直阻塞在这里等待客户端的输入,当加上这个设置后就不会在这等着了 测试代码 客户端连接上后没有输入直接会执行到这一步
阅读全文
摘要:解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0 原因:是PHP有两种方式添加扩展模块,一种是直接编译进了PHP,另外一种是通过共享模式添加模块,并在php.ini配置文件中配置相应的模块。以上问题出现的原因是我们需
阅读全文
摘要:windows下使用vscode配合xebug调试php脚本 要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,php7.3应该是有的,php7.3.4好像没有默认是不加载这个扩展的,需要在php.ini中加载上这个扩展,一定得注意是zend_extensionzend_exte
阅读全文
摘要:一般是在用php做多进程处理时可能会用到
阅读全文
摘要:先定义消息类型 orders.proto 在GOPATH创建目录和编译这个消息类型输出到该目录,包名是message 编写go文件进行序列化和反序列化刚才生成的包里的类型结构体数据
阅读全文
摘要:官网介绍$request_time – Full request time, starting when NGINX reads the first byte from the client and ending when NGINX sends the last byte of the respo
阅读全文
摘要:一般使用gprc是需要使用protobuf作为数据传输的格式标准,可以对要传输的对象结构体进行序列化 先安装protoc,找到对应版本,下载直接把二进制文件复制到环境变量可以访问到的地方就行 https://github.com/protocolbuffers/protobuf/releases 安
阅读全文
摘要:wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -apt-get install apt-transport-httpsecho "deb https://artifacts.elast
阅读全文
摘要:安装grafana,官网提供了ubuntu的安装包,直接进行安装 wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpkg -i grafana_6.5.1_amd64.deb update-rc.d grafana-s
阅读全文