V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  guonaihong  ›  全部回复第 1 页 / 共 23 页
回复总数  450
1  2  3  4  5  6  7  8  9  10 ... 23  
16 天前
回复了 fields 创建的主题 程序员 你有多久没有打开过 GitHub 了?
每天。
可行,感谢。
20 天前
回复了 dtgxx 创建的主题 全球工单系统 gpt 是不是无法查询啦。。
同样,发不了消息。10 点到现在没有恢复。
一个月 10 刀,国内支持 visa 的信用卡可以买。
25 天前
回复了 8eacekeep 创建的主题 Blogger 想看看大家的博客
我是直接开个 github issue 当博客用的。正好可以记录下碎片化的想法。
@rekulas 有一个简单的方法验证, 如果对端传过来的 gzip 包,都缓存到 bytes.Buffer ,完毕可以解出来。那就说明你的 io.Pipe 的用法不对。
因为 list.Accpet 只有新的连接过来,才会停止阻塞,所以这种写法的 go 程的个数等于连接 net.Conn 的个数。

另外聊个题外话,创建大量的 go 程,新版本 go 的 runtime 里面已经做了复用和优化。性能开销没有想象中那么大。
做过一个实验,使用 https://github.com/antlabs/quickws 这个 websocket 库,创建 100w 个 go 程,内存占用大约是 7.67GB 左右,8w tps 并发,50%的时延是 511.62ms

--------------------------------------------------------------
BenchType : BenchEcho
Framework : quickws
TPS : 86326
EER : 413.65
Min : -1ns
Avg : 573.50ms
Max : 1.44s
TP50 : 511.62ms
TP75 : 705.19ms
TP90 : 715.05ms
TP95 : 718.11ms
TP99 : 721.15ms
Used : 49.70s
Total : 5000000
Success : 4290729
Failed : 709271
Conns : 1000000
Concurrency: 50000
Payload : 1024
CPU Min : 120.52%
CPU Avg : 208.70%
CPU Max : 231.77%
MEM Min : 7.67G
MEM Avg : 7.67G
MEM Max : 7.67G
忽略我上一个回答,直接用 io.Pipe 。然后 zlib 解决套下 io.Pipe 的 reader 对象。另外收 gzip 数据的地方并发写就行。
https://pkg.go.dev/io#Pipe
把 chan 包装成一个 io.Reader, 收数据的地方直接并发 chan , 读的地方 select chan 就行。

type myReader struct {
c chan []byte
}

func (m *myReader) Read(p []byte) (n int, err error) {

copy()
}
楼主文章写得不错。
56 天前
回复了 Znf7 创建的主题 机械键盘 求静电容键盘推荐
我是把机械键盘 上了点键盘油。手感润了很多。mark 下这个贴子。
58 天前
回复了 desperadoo 创建的主题 计算机 过年回家办公学习小主机推荐
5800h 或者 4800h 的小主机性价比高。44 楼和 60 楼的兄弟已经回答过。
5800 这个 u(8 核 16 线程) 堪比洋垃圾 e5 2686(18 核 36 线程)。我用自己写的一个 websocket 库测试了下, 5800h 跑 46w/s 的话,e5 跑 52w/s 。所以这个 5800 的性价比很高。
68 天前
回复了 chai2010 创建的主题 程序员 《国产编程语言蓝皮书-2023》开启申报
厉害。
也许 linux 之父的影响力比 sqlite 之父高呗。
74 天前
回复了 fulvaz 创建的主题 职场话题 最近前端工作感悟一二
楼主描述的解决问题的方法,我一般称为“控制变量法”,a&b&c 都可能导致一个问题的产出,每次改变一个点,看下结果。这是初中学习电路,get 的一个方法论。
@helloword001 不能无缝转,要自己写代码。无论是 http chunked 模拟(也叫 sse),还是 websocket 或者 grpc 都要写点代码。
@helloword001 你想用 http chunked 模拟?具体代码网上找找例子,这个也看客户端的开发能力,搞得定也行,缺点只能模拟单向流,s->c 侧的。websocket 和 grpc stream 是全双工的,c->s ,s->c 都行。
websocket 库可以玩下我写的,https://github.com/antlabs/quickws ,有使用上的问题帮你看看。
你启个 websocket 或者 grpc stream 服务端。客户端不停读就行。
182 天前
回复了 chengiri 创建的主题 Go 编程语言 请教一个关于 go websocket 的问题
服务端在 read/write 的地方加超时时间和心跳。心跳就由客户端向服务端发,毕竟客户端要做链接保活的。
分两种情况讨论:
1. 主动推送场景(s->c):
比如红点,点赞,收藏,关注的通知。服务端在 WriteMessage 的时候加个稍短的超时时间。超时了就关闭这个 conn ,主动踢掉坏的 conn 。
2. 客户端主动要推消息到客户端这种(c->s):
客户端确认连接的健康度,做法的话
2.1 在 WriteMessage 的时候加些超时时间
2.2 加些心跳检查,定时 ping/pong ,超时间根据业务的敏感度,和服务端压力定个值,最后失败的话再用指数退避定个失败的重试时间。

所以做法就是开头聊的方式。
1  2  3  4  5  6  7  8  9  10 ... 23  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2803 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 239ms · UTC 15:27 · PVG 23:27 · LAX 08:27 · JFK 11:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.