又是一年了
本来想写成日记,但网站的日记模块出了bug。:)
之前,总会回忆过去,想起过去的得失。有很多不甘和懊悔,但最近一个月,反而没有那么焦虑了。
2024就是34岁。如今,听着远方的炮声,心中平静又有一点忐忑。未来会怎么样并不知道,将目光聚焦在已经得到的,而不是未曾拥有的,因为未拥有的东西无穷无尽。这样说不定会有更好的运势呢。
[查看更多...]来自 大脸猪 发送于 2024-02-09 23:56 - 0 条评论
这是我们的个人网站,欢迎大家光临。
又是一年了
本来想写成日记,但网站的日记模块出了bug。:)
之前,总会回忆过去,想起过去的得失。有很多不甘和懊悔,但最近一个月,反而没有那么焦虑了。
2024就是34岁。如今,听着远方的炮声,心中平静又有一点忐忑。未来会怎么样并不知道,将目光聚焦在已经得到的,而不是未曾拥有的,因为未拥有的东西无穷无尽。这样说不定会有更好的运势呢。
[查看更多...]来自 大脸猪 发送于 2024-02-09 23:56 - 0 条评论
省流内容提要:
TIME_WAIT
状态,这通常是由于 HTTP 中的 transport
配置 MaxIdleConnsPerHost/MaxIdleConns
设置不当所导致的。次要原因是,go必须将连接中的数据使用io.ReadAll
读完才能Close,否则连接也不会复用。MaxIdleConnsPerHost/MaxIdleConns
,这些配置非常重要,在大吞吐的客户端上可以理解为客户端维持的最终连接数。MaxIdleConnsPerHost默认=2,可能太保守。MaxConnsPerHost
一般配置为等于或略大于MaxIdleConnsPerHost
,这个值如果配置的过小,在连接达到阈值,会阻塞连接的创建进行等待。从而影响网络的吞吐。如果 MaxConnsPerHost
配置得过大,而 MaxIdleConnsPerHost
配置得过小,则会引发大量的连接创建和销毁造成TIME_WAIT
。来自 大脸猪 发送于 2024-01-18 13:12 - 0 条评论
在实践中学习,动动手指
package main
import "common/greeterinterface"
type ChineseGreeter struct {
}
func (g *ChineseGreeter) Greet() string {
return "世界你好"
}
// 这个就是可导出的函数,插件在lookup这个函数
func NewGreeter() greeterinterface.Greeter {
return new(ChineseGreeter)
}
编译插件
go build -buildmode=plugin -o ./ch.so ch.go
[查看更多...]
来自 大脸猪 发送于 2023-08-10 22:00 - 0 条评论
有时候在打印日志的时候,在频繁的操作中,会被日志刷屏,但又想定期打印查看状态。这个时候可以利用time.Timer实现一个可指定最小执行间隔的函数,具体看代码吧。
// Package tools ...
package tools
import (
"sync/atomic"
"time"
)
/*
NewTickDo 是一个很有意思的小工具,每隔n秒**尝试**执行一个操作,用在打日志非常方便,避免刷屏
使用方法:
tick = NewTickDo(time.Second)
for{
tick.Do(func() {
log.Infof("每秒执行一次,未到时间什么都不会发生,直接忽略")
[查看更多...]
来自 大脸猪 发送于 2024-01-09 14:49 - 0 条评论
假设有表
CREATE TABLE IF NOT EXISTS `mytable`(
`id` INT UNSIGNED AUTO_INCREMENT,
`flow` INT NOT NULL,
`name` VARCHAR(100) NOT NULL,
`age` int NOT NULL,
key(flow),
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入三行原数据
insert into mytable values(1,1,"hello1", 10);
insert into mytable values(5,5,"hello2", 15);
[查看更多...]
来自 大脸猪 发送于 2023-06-05 20:37 - 0 条评论
tag: grpc stream client server
本文将使用go,编写通用的服务端、客户端的代码。包含单向流和双向流。
Recv
)发送端(调用Send
)。流程是类似的。CloseSend
,则服务端Recv EOF
。当服务端return nil
,则客户端Recv EOF
。这样才能保证数据的传输安全。其它情况下终止客户端或服务端,都可能造成数据丢失。Recv/Send
会阻塞,需要在独立协程中处理。GracefulStop
的时候,新的流不能进来,但服务端没有能力终止stream,客户端也不会收到通知。可以return nil
强行终止stream,此时客户端收到EOF
,客户端如果在发送数据,则数据可能丢失。stream应该有生命周期,在GracefulStop
后,等待这个周期再进行强行Stop
。一种不好的实现是,发送端是无穷循环永远不CloseSend
,使得stream的生命周期无限长,GracefulStop
机制失效。来自 大脸猪 发送于 2022-06-06 14:50 - 0 条评论
这篇文章将搜集一些平时在工作中用到的使用反射小实例。
反射反射真快乐。
本实例将遍历slice,并且将它转换为int类型
func Slice2Ints(s interface{}) ([]int, error) {
val := reflect.ValueOf(s)
if val.Kind() != reflect.Slice {
return nil, fmt.Errorf("s:%v is not slice type", s)
}
ret := make([]int, 0, 10)
for i := 0; i < val.Len(); i++ {
[查看更多...]
来自 大脸猪 发送于 2021-09-09 11:29 - 0 条评论
在业务中,kafka的消费者服务非常常见。主要流程是从kafka中取出消息,处理消息。
本文使用kafka-go(github.com/segmentio/kafka-go),调研kafka优雅退出的方式和注意事项。
在这之前,先准备一个多 partitions的 kafka作为实验环境。
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic testkafka # 创建kafka topic
kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic testkafka # 删除topic
[查看更多...]
来自 大脸猪 发送于 2023-11-07 14:33 - 0 条评论
一般使用容器部署的话会将data目录挂出。
首先,进入/data/nginx,ls后会发现有这些目录。
custom dead_host default_host default_www dummycert.pem dummykey.pem proxy_host redirection_host stream temp
进入 default_host,创建文件:
touch http_top.conf
vim http_top.conf
// 文件就这一行内容
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=3r/s;
[查看更多...]
来自 大脸猪 发送于 2023-11-11 20:22 - 0 条评论
先申请一个域名,并且将A记录解析到需要部属的机器IP。
这里以pan.yinzihao.com
为例
首先在目录下创建这些文件,创建nextcloud文件夹
run.sh
nohup bash /home/loop.sh &
/entrypoint.sh php-fpm
loop.sh
apt update
apt install smbclient -y
apt install sudo procps -y
[查看更多...]
来自 大脸猪 发送于 2020-02-20 17:44 - 0 条评论