logo科技微讯

CloudFlare Workers 初学笔记

作者:科技微讯
日期:2022-03-17
📝 笔记

CloudFlare Workers 有两种写法:

  • service worker
  • module worker

其中 module worker 是 2021 年 11 月宣布支持的,所以网上的资源还不是很多。module worker 中,被 export default 的那个对象就是一个 worker,这个函数里面的每一个 fetch 函数就是一个 event,对于 websocket 操作每一个 scheduled 函数就是一个 event,即只有 2 种 event。

//export 一个对象,对象中的每一个属性是一个 event handler
export default {
  async fetch(request, environment, context) {
    return new Response("I’m a module!");
  },
  async scheduled(controller, environment, context) {
    // await doATask();
  },
};

wrangler 正在测试 2.0,新项目可以用 2.0 创建 module worker,但是已有项目还是建议用 1.0,1.0 也可以创建 module worker,需要这样配置 wrangler.toml:

name = "my-worker"
type = "javascript"
workers_dev = true

[build.upload]
format = "modules"
dir = "./src"
main = "./worker.js" # becomes "./src/worker.js"

[[build.upload.rules]]
type = "ESModule"
globs = ["**/*.js"]

# Uncomment if you have a build script.
# [build]
# command = "npm run build"

service worker 也可以引入 npm package,但支持的 npm package 肯定没有 nodejs 那么多,YouTube 一个视频分享了如何使用 service worker 实现 web server,即有路由地返回内容。要引入 npm package 需要在配置文件中开启 webpack 模式,可能还要自定义 webpack 配置文件。

service worker 使用 import 引入 package,和浏览器一样,事实上它用的就是浏览器的 service worker api。

代码包目前的限制为 1MB。

cloudflare worker 可以通过 request.cf 获得请求方的信息,包括国家、地区、时区等,以及是哪个 data center 响应请求方的请求。貌似 cloudflare 会使用那个距离 fetch 的 url 最近的那个 data center 响应请求?例如请求 apple ota 会使用加州的 data center,请求北京市政府会使用香港的 data center。奇怪的是,cloud flare 在大陆地区也有 data center,为什么不通过大陆的 data center 响应请求呢。

data center 和 ip 不一样,cloudflare 的 ip 地址不多,只有十几二十个吧,但是 data center 几十上百是有的。

donation赞赏
thumbsup0
thumbsdown0
暂无评论