V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  5waker  ›  全部回复第 1 页 / 共 2 页
回复总数  37
1  2  
1 天前
回复了 bzq 创建的主题 钓鱼 想入坑路亚了,请指教
路亚真的能中鱼吗 😭
我很好奇,用 zig vibe coding 好用吗?容易出正确代码吗?
3 天前
回复了 NeilZhy1 创建的主题 生活 骂醒此龟!
多让龟龟健身,补充自己,心思花在自己身上就能逐渐从那种龟的状态脱离出来了
11 天前
回复了 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 写的应用月活怎么弄的,买的吗?
支持一下
172 天前
回复了 zhya 创建的主题 健康 大家有得偏头疼的吗?
先兆性偏头疼,头疼到好说,眼前出现光斑这个先兆受不了。让中医针灸扎脑袋后不会出现先兆了,之前都不信中医的😂
有担心是正常的,用多了知道边界在哪就不慌了。我觉得还是尽量拆分问题,具体到一个 function 去生成最好,自己 review 也轻松
数组双指针过滤数据
刷题用 vsc 很好,写业务代码就算了
这速度
r-nacos 测试环境用的真的很爽,期待大佬的 xxl-job
2024-10-09 11:29:32 +08:00
回复了 dadupi 创建的主题 Android 帮我老爸清理手机,震惊了,后台安装了无数垃圾 APP
应用商店加应用锁,密码不告诉家里人就行了
2024-10-08 14:55:39 +08:00
回复了 ityspace 创建的主题 Linux 推荐一个平铺化桌面 Niri
我建议试试一楼说的 cosmic ,平铺浮动都能玩。我是从 dwm -> hyprland -> cosmic ,现在主力 cosmic 了。
2024-06-03 14:09:47 +08:00
回复了 5waker 创建的主题 操作系统 [求救]加装内存后,双系统的 win 启动掉了
@nevadax 我回去试下
2024-05-27 11:26:26 +08:00
回复了 BryanYue 创建的主题 Linux 大佬们 请教下 现在 Linux 下 N 卡驱动 支持兼容怎么样
我自己是 A 卡没啥问题,N 卡听说 ubuntu 和 PopOs 搞得好
1  2  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2454 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 11:09 · PVG 19:09 · LAX 03:09 · JFK 06:09
♥ Do have faith in what you're doing.