V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  5waker  ›  全部回复第 1 页 / 共 3 页
回复总数  45
1  2  3  
3 天前
回复了 Gesar 创建的主题 MacBook Pro 2025 年底,还有人用 intel 的 mac 吗
19 mac book pro 还在用,掉电掉的厉害
13 天前
回复了 jiafeiblog 创建的主题 程序员 Trae 现在用着还卡么
卡,什么时候能基于 zed 去做改造啊。vscode 都很正常,为啥 trae 直接卡到爆。
14 天前
回复了 cmos 创建的主题 程序员 要是用 Rust 就不会出问题了
原始 Go 服务性能完全够用,业务也在稳定运行,重构是完全没道理的。真有性能问题了,我都建议扩容,重构耗时耗人
14 天前
回复了 cmos 创建的主题 程序员 要是用 Rust 就不会出问题了
@94 CF 的那次问题本质是变更不合理,没有任何灰度,预设特征数量过于死板。错误不处理顶多背锅 10%,这里面还有程序员的锅呢
21 天前
回复了 5waker 创建的主题 程序员 Minio 进入仅维护状态,转向 MinIO AIStor
@lexno 没用过,看起来不错,star 下后续个人项目用用
21 天前
回复了 5waker 创建的主题 程序员 Minio 进入仅维护状态,转向 MinIO AIStor
@joelaw RustFS ,但目前它在大文件(>5mb)的性能还不是很好
37 天前
回复了 510908220 创建的主题 生活 北方的冬天到了,怎么防止静电
3 个方案
1.摸墙,必须是腻子粉墙或者水泥墙,瓷砖和木板不行
2.捏住金属钥匙用钥匙头触碰大面积金属物,让电从打你改成打钥匙
3.如果 1 、2 都没有条件,那就减轻痛苦,用神经比较少的关节部位触碰,比如食指第二指关节
38 天前
回复了 laojuelv 创建的主题 投资 十年韭菜的顿悟:炒股的密码是“等待”
我随时随地在等待,做你感情上的依赖~
41 天前
回复了 bzq 创建的主题 钓鱼 想入坑路亚了,请指教
路亚真的能中鱼吗 😭
我很好奇,用 zig vibe coding 好用吗?容易出正确代码吗?
43 天前
回复了 NeilZhy1 创建的主题 生活 骂醒此龟!
多让龟龟健身,补充自己,心思花在自己身上就能逐渐从那种龟的状态脱离出来了
51 天前
回复了 BigChengzi 创建的主题 Rust 如何看待 Rust?
@cslive 深有同感,每次都是入门
@montaro2017 我刚好昨天也遇到了类似的问题,我的做法是在一个长连接里不断检测 header ,然后根据内容再做转发
```rust
loop {
// 读取到完整头部
let header_end = loop {
if let Some(pos) = headers_end_pos(&buf) {
break Some(pos);
}
let n = client_stream.read(&mut tmp).await?;
if n == 0 {
// 客户端关闭或无更多数据
if buf.is_empty() {
return Ok(());
} else {
return Ok(());
}
}
buf.extend_from_slice(&tmp[..n]);
if buf.len() > 128 * 1024 {
error!("请求头过大,终止连接");
return Ok(());
}
};
let header_end = header_end.unwrap();
let headers_vec: Vec<u8> = buf[..header_end].to_vec();

let virtual_env = parse_virtual_env_from_headers(&headers_vec);
let content_length = parse_content_length(&headers_vec);
let chunked = is_chunked(&headers_vec);

// 读取完整正文
let body_len = if let Some(cl) = content_length {
while buf.len() < header_end + cl {
let n = client_stream.read(&mut tmp).await?;
if n == 0 {
error!("Content-Length 指定但连接提前关闭");
return Ok(());
}
buf.extend_from_slice(&tmp[..n]);
}
cl
} else if chunked {
loop {
if let Some(end) = chunked_body_end_pos(&buf[header_end..]) {
break end;
}
let n = client_stream.read(&mut tmp).await?;
if n == 0 {
error!("chunked 正文未完整但连接已关闭");
return Ok(());
}
buf.extend_from_slice(&tmp[..n]);
}
} else {
0
};

let request_end = header_end + body_len;
let body = &buf[header_end..request_end];
let mut new_headers = rewrite_connection_close(&headers_vec);
new_headers.extend_from_slice(body);

// 路由:每个请求一个目标连接;响应仅回写到客户端
if let Some(env) = virtual_env {
let ctrl_opt = {
let envs = (*VIRTUAL_ENVS).lock().unwrap();
envs.get(&env).cloned()
};
if let Some(mut ctrl) = ctrl_opt {
match ctrl.open_stream().await {
Ok(mut sub) => {
sub.write_all(&new_headers).await?;
let _ = tokio::io::copy(&mut sub, &mut client_stream).await;
}
Err(e) => {
error!("打开虚拟环境 {} 的子流失败: {:?}", env, e);
let mut upstream_stream = TcpStream::connect(upstream_addr).await?;
upstream_stream.write_all(&new_headers).await?;
let _ = tokio::io::copy(&mut upstream_stream, &mut client_stream).await;
}
}
} else {
let mut upstream_stream = TcpStream::connect(upstream_addr).await?;
upstream_stream.write_all(&new_headers).await?;
let _ = tokio::io::copy(&mut upstream_stream, &mut client_stream).await;
}
} else {
let mut upstream_stream = TcpStream::connect(upstream_addr).await?;
upstream_stream.write_all(&new_headers).await?;
let _ = tokio::io::copy(&mut upstream_stream, &mut client_stream).await;
}

// 删除已消费的请求字节,保留后续请求(若已到达)
if request_end < buf.len() {
let remaining = buf.split_off(request_end);
buf = remaining;
} else {
buf.clear();
}
}
```
```rust
钓鱼?
ai 写的应用月活怎么弄的,买的吗?
支持一下
212 天前
回复了 zhya 创建的主题 健康 大家有得偏头疼的吗?
先兆性偏头疼,头疼到好说,眼前出现光斑这个先兆受不了。让中医针灸扎脑袋后不会出现先兆了,之前都不信中医的😂
有担心是正常的,用多了知道边界在哪就不慌了。我觉得还是尽量拆分问题,具体到一个 function 去生成最好,自己 review 也轻松
数组双指针过滤数据
1  2  3  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3188 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 45ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
♥ Do have faith in what you're doing.