通用基础项目

    17. CloudFlare的生态的完全打开

    会员专享 · 非会员仅可阅读 30% 的正文。

    发布时间
    November 17, 2025
    阅读时间
    4 min read
    作者
    Felix
    访问
    会员专享
    这是预览内容

    非会员仅可阅读 30% 的正文。

    目前为止整个项目的涉及的后端基建是有所欠缺的,例如队列、定时器、内存KV、Websocket等。这些能力不是在实现一个最简项目中必须的,但是能帮助大家更好的理解后端生态、架构,以及在未来有一天所需的时候把这些基建从尘封的记忆中唤起。

    这些部分都能够完整的通过Cloudflare生态来实现,非常感谢xxgw的带来的B站视频链接,是因为视频才有了这个章节的补充。

    改变Worker的入口

    首先,为了能够自定义Cloudflare Worker的行为,我们需要修改项目的 wrangler.jsonc 配置文件。将 main 属性指向一个新的入口文件 worker.ts。这个文件将作为我们所有Cloudflare后端服务的统一入口,而不仅仅是运行Next.js应用。

    // wrangler.jsonc
    {
      // ...
      "main": "worker.ts"
      // ...
    }
    ```
    
    接下来,我们创建 `worker.ts` 文件。这个文件的核心思想是:在处理Next.js应用本身请求的同时,扩展支持Cloudflare的其他原生功能,如定时任务(Cron Triggers),Durable等。
    
    ```typescript
    // 1. 导入由 open-next 生成的 Next.js 应用处理器
    // @ts-ignore `.open-next/worker.ts` 是在构建时生成的
    import { default as handler } from './.open-next/worker.js'
    
    // 2. 导出一个包含 fetch 和 scheduled 处理器的对象
    export default {
      /**
       * 处理所有传入的 HTTP 请求。
       * 我们将请求直接委托给 open-next 的处理器,以确保 Next.js 应用正常运行。
       */
      fetch: handler.fetch,
    
      /**
       * 处理由 Cron Triggers 触发的定时任务。
       * Cloudflare 会在预定时间调用此函数。
       */
      async scheduled(controller: ScheduledController, env: CloudflareEnv, ctx: ExecutionContext) {
        // 你可以根据 wrangler.jsonc 中定义的 cron 表达式来执行不同的任务
        switch (controller.cron) {
          case '*/3 * * * *':
            // 每三分钟执行一次
            console.log('Cron job (every 3 mins) processed at:', new Date(controller.scheduledTime))
            break
          case '*/10 * * * *':
            // 每十分钟执行一次
            console.log('Cron job (every 10 mins) processed at:', new Date(controller.scheduledTime))
            break
          case '*/45 * * * *':
            // 每四十五分钟执行一次
            console.log('Cron job (every 45 mins) processed at:', new Date(controller.scheduledTime))
            break
        }
      }
    } satisfies ExportedHandler<CloudflareEnv>
    
    // 3. 重新导出 open-next 和自定义的 Durable Objects 处理器
    // 这确保了 Cloudflare 平台能够正确识别和使用它们。
    // @ts-ignore
    export { DOQueueHandler, DOShardedTagCache, BucketCachePurge } from './.open-next/worker.js'
    export { Counter } from './durable/counter.js'
    ```
    
    到这里,我们已经完成了将 Next.js 应用与自定义 Worker 逻辑(如定时任务)集成的关键一步。所有 Cloudflare 生态的扩展都可以在 worker.ts 中进行配置和导出。
    
    接下来,我们可以将 Cloudflare 的生态功能大致归为两大类:配置驱动型功能和类扩展型功能。理解这两者的区别有助于我们更清晰地组织代码和配置。
    
    1.  配置驱动型功能 (Configuration-Driven)
        这类功能(如定时器、队列)的核心工作模式是“先配置,后处理”。你首先需要在 wrangler.jsonc 文件中声明它们的触发规则或绑定信息。然后,在 worker.ts 文件中,你需要实现一个对应的处理器函数(例如 scheduled 用于定时器,queue 用于队列)来响应这些事件并执行具体的业务逻辑。
    2.  类扩展型功能 (Class-Based Extension)
        这类功能的代表就是 Durable Objects (DO)。它的工作模式是“先定义,后绑定”。你需要先编写一个独立的类(Class)来封装其状态和方法,定义其完整的行为。之后,在 wrangler.jsonc 中配置这个类并创建一个绑定,最后在 worker.ts 中导出这个类,让 Cloudflare 平台能够识别并实例化它。这种方式非常适合构建有状态的、可复用的后端组件。
    
    ## 配置驱动型: 定时器
    
    首先从相对简单的配置驱动型功能——定时器开始。
    
    这部分就非常的简单,只需要在 `wrangler.jsonc` 的 `triggers` 部分中添加 cron 表达式,之后就会在 `Worker.ts` 处理器中执行。
    
    ```
    "triggers": {
        "crons": [
            "*/3 * * * *",
            "*/10 * * * *",
            "*/45 * * * *"
    会员专享

    订阅后解锁完整文章

    支持创作、解锁全文,未来更新也会第一时间送达。

    评论

    加入讨论

    0 条评论
    登录后评论

    还没有评论,来占个沙发吧。