并发编程无非是解决 同步、互斥、进程通信、多线程执行 这4个问题 对应的关键字是
- sync.wait
- sync.mutex
- channel
- goruntime
查看了httpx的代码实现,有如下学习体会
- 发现似乎还是一个goroutine负责一个请求,只要在声明waitGroup时指定最大并发量即可 httpx中的相关代码
wg, _ := syncutil.New(syncutil.WithSize(r.options.Threads))
- go多线程编程中若涉及到routine通信,则需要使用channel.尽量不要使用内存通信,因为内存通信会消耗大量内存,而channel则不会
- bugs 修正分页的逻辑--使用flag标记是否第一次进入循环,感觉比do while好用,在循环开始就判断已检索的数量
- 收集好了各种api的dork并整理成yaml格式
- 使用PD库设置最大goroutine并发量
- 研究发现api搜索结果会比网页结果少,并且有时可以忽略sk-,直接搜索URL然后正则即可
- 直接使用PD的库设置最大goroutine并发
todo
- 完成多个apikey的收集(整合各类api的调用,流式输出)
- 分别验证apikey的有效性
- 结合oneapi实现调用的负载均衡
- 寻找更多api供应商
- 为了方便起见,吧?顺便看看他是怎么做的,直接拿函数过来似乎更加轻便
- 数据持久化,设计sqlite数据库保存并定期检查
- MCP配置dorks