基于axum和chromiumoxide实现headless browser服务
💡
原文中文,约4400字,阅读约需11分钟。
📝
内容提要
这篇文章介绍了作者使用Rust实现了一个类似于Golang的功能,并提供了代码链接。主要功能是提供headless chrome的API服务,支持puppeteer连接远程的headless chrome实例。还介绍了一些遇到的问题和心得,以及与Gin框架的比较。文章还介绍了如何实现PDF和Screenshot以及puppeteer连接浏览器实例的功能。最后总结了使用Rust开发后台服务的优点和不足。
🎯
关键要点
- 作者使用Rust实现了类似于Golang的功能,提供headless chrome的API服务。
- 支持puppeteer连接远程的headless chrome实例,内置生成pdf和截图的功能。
- 在开发过程中遇到问题,选择了tokio作为异步运行时。
- Rust的Drop功能类似于C++的析构功能,log功能强大,但vscode对tokio的支持不够友好。
- Axum框架与Gin框架比较,Axum的extract功能方便,但错误处理不如Gin友好。
- 实现PDF和Screenshot功能需要创建browser和page实例,并通过tokio::select实现超时等待。
- browserlify允许puppeteer连接headless chrome实例,实现browser as a service的功能。
- 通过Dockerfile.cn实现多阶段构建,默认镜像选择Debian:bookworm。
- Rust的异常处理和异步适合后台服务开发,但库的成熟度和编译速度相对较慢。
➡️