V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  guonaihong  ›  全部回复第 1 页 / 共 23 页
回复总数  447
1  2  3  4  5  6  7  8  9  10 ... 23  
20 小时 41 分钟前
回复了 Motorola3 创建的主题 GitHub Copilot 你们用 GitHub Copilot 吗 都是怎么买的?
一个月 10 刀,国内支持 visa 的信用卡可以买。
1 天前
回复了 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()
}
楼主文章写得不错。
32 天前
回复了 Znf7 创建的主题 机械键盘 求静电容键盘推荐
我是把机械键盘 上了点键盘油。手感润了很多。mark 下这个贴子。
33 天前
回复了 desperadoo 创建的主题 计算机 过年回家办公学习小主机推荐
5800h 或者 4800h 的小主机性价比高。44 楼和 60 楼的兄弟已经回答过。
5800 这个 u(8 核 16 线程) 堪比洋垃圾 e5 2686(18 核 36 线程)。我用自己写的一个 websocket 库测试了下, 5800h 跑 46w/s 的话,e5 跑 52w/s 。所以这个 5800 的性价比很高。
44 天前
回复了 chai2010 创建的主题 程序员 《国产编程语言蓝皮书-2023》开启申报
厉害。
也许 linux 之父的影响力比 sqlite 之父高呗。
49 天前
回复了 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 服务端。客户端不停读就行。
158 天前
回复了 chengiri 创建的主题 Go 编程语言 请教一个关于 go websocket 的问题
服务端在 read/write 的地方加超时时间和心跳。心跳就由客户端向服务端发,毕竟客户端要做链接保活的。
分两种情况讨论:
1. 主动推送场景(s->c):
比如红点,点赞,收藏,关注的通知。服务端在 WriteMessage 的时候加个稍短的超时时间。超时了就关闭这个 conn ,主动踢掉坏的 conn 。
2. 客户端主动要推消息到客户端这种(c->s):
客户端确认连接的健康度,做法的话
2.1 在 WriteMessage 的时候加些超时时间
2.2 加些心跳检查,定时 ping/pong ,超时间根据业务的敏感度,和服务端压力定个值,最后失败的话再用指数退避定个失败的重试时间。

所以做法就是开头聊的方式。
165 天前
回复了 Dongxiem 创建的主题 Go 编程语言 go 开源项目求推荐
@iwwftlan 带有目的性看就行。比如要做一个好玩的东西,少了相关的知识点,然后看下对应的书。
我现在获取知识点的过程是 1. 做一个好玩的东西-》 2. 缺少相关知识-》 3. 边查边做。 这样注意力不容易散,可以坚持下去。如果喜欢有分享欲望,还可以加 4. 总结。

以前也适过没有目的性看书。看过 unix 环境高级编程, apue ,大而全的书,容易放弃。

可以根据自己的爱好选择适合的流程,我是特别喜欢写代码,才这么获取知识点的。喜欢就意味着不容易放弃。
174 天前
回复了 dyllen 创建的主题 Go 编程语言 goframe 框架好吗?我感觉怪怪的。。。
gf 和 go-zero 我选后者。

上面的选择主要基于清晰度,gf 眼花缭乱的基础类型,看别人用 gf 写的代码清晰度绕来绕去不知所云。

还有一个是担心 gf 代码质量,记得看同事的代码用了.gVar , 就扫了一眼 gf 里面的 gVar 的 New 的实现。发现一个 bool 变量的语义写反了,这是一个 bug(后面和同事说了下,应该提 pr 修复了)。

最后如果 gf 作者能看到我的回答,有些建议:
1. 基础类型没必须 type 一个新类型,只会分裂认识。
2. json/xml 等等基础能力没有必须再包装下,同一。
3. 观注能提升生产力的地方,静态 MVC ,统一数据结构,然后根据这些数据结构生成一些 logic 代码。
179 天前
回复了 csznet2023 创建的主题 程序员 如何推广自己的开源项目
楼上的真有趣。接个龙,比如这样。高性能低内存占用 websocket 库 https://github.com/antlabs/quickws
1  2  3  4  5  6  7  8  9  10 ... 23  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5550 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.