前段时间,我开了一个中转站。使用new-api部署的,放在了我的 macmini 上面。 正巧那段时间我有在用备受大家吹捧的 opencode go 套餐,当时这个 opencode go 简直就是第二家 deepseek。开一个这个,有用不完的 deepseek v4 flash。 差
前几个月,我开始了一个容器化计划,把各种东西都容器化部署,然后用 frp 穿透到公网使用,同时使用 certd 申请证书,把所有web服务映射到我的不同的二级域名。 这样做确实非常方便,后来我决定把我的 macmini 专门改造为一个运行 docker 容器的机器,所以直接把这个机器恢复了出厂设置
前言 frp(Fast Reverse Proxy)是一个高性能的反向代理应用,可以帮助将内网服务暴露到公网。其中最常用的功能之一就是通过 80 和 443 端口提供 HTTP/HTTPS 服务,并通过域名区分不同的隧道。本文将深入探讨其底层实现原理。 一、核心概念:基于域名的虚拟主机 1.1
Spawning tasks 上一个练习的解答应该类似于这样: pub async fn echo(listener: TcpListener) -> Result<(), anyhow::Error> { loop { let (mut socke
异步函数 我们目前编写的所有函数和方法都是“急切型”的。 在我们调用它们之前,它们什么都不会发生。但一旦调用,它们就会一直运行到完成:完成所有工作,然后返回结果。 有时,这种做法并不理想。 例如,如果我们正在编写一个 HTTP 服务器,可能会有很多等待:等待请求体到达、等待数据库响应、等待下游服务响
线程并非 Rust 中编写并发程序的唯一方法。 本章我们将探索另一种方法:异步编程(asynchronous programming)。 具体来说,我们可以学到: async/.await 关键字,我们可以轻松编写异步代码 Future trait,用于表示尚未完成的运算 tokio,最流行的异步
Sync(同步) 在结束本章之前,我们来学习一下 Rust 标准库中的另一个关键特性:同步 (Sync)。 同步 (Sync) 是一个自动特性,就像 Send 一样。 所有可以在线程间安全共享的类型都会自动实现同步特性。 换句话说:如果 &T 是 Send,则 T 是Sync。 T:Sync
## Readers and writers 我们新的`TicketStore`工作正常,但读取性能不佳:由于 `Mutex` 无法区分readers和writers,因此同一时间只能有一个客户端读取特定的工单。 我们可以通过使用不同的锁定原语 `RwLock` 来解决这个问题。`RwLock`
Locks, Send and Arc 上一节实现的补丁策略有个问题:就是它很racy。(不太清楚为什么用这个词) 如果两个客户端在同一时间为同一个ticket发送patches,服务器将会以任意顺序执行他们。而最后一个被处理的patch会覆盖掉上一个进行更改的patch。 版本号 我们可以尝试使用
Github 命令行笔记汇总 第一节:基础命令 使用命令行操作Git 基础命令 git --version - 返回git版本,说明安装过git git clone <仓库地址> - 克隆git远程仓库到本地 git status - 查看目前的git状态,处于哪个分支,是否同步,更改