更新时间:2023-11-30 11:03:30
本章示例为通过【边缘KV】+【边缘函数】,创建一个虚拟等候室。
代码说明:虚拟等候室目标url为:http://ctest.eca.wangsu.com/ECA-test/pet-shop-website-template/team.html。等候室最多允许1个人同时访问(访问成功后有15秒直连时间),2个人同时排队。为方便单机测试,使用『客户端IP+UserAgent』作为客户唯一标识。
详细代码
import { waitingRoom } from "./wslib-waiting-room"
async function handleRequest(request) {
const headers = request.headers
const clientID = headers.get("cdn-src-ip") + headers.get("user-agent") // 由客户决定取什么参数来标识客户
if (!clientID) {
return fetch(request) // 没有客户标识,就无法做waiting room逻辑
}
const url = new URL(request.url)
const roomID = url.hostname // 由客户决定什么范围的url共用一个等候室
const args = {
connectedTimeout: 15, // 插入连接池的数据,多长时间后自动删除
connectedMax: 1, // 允许的最大的连接客户数
waitingTimeout: 30, // 插入等候池的数据,多长时间后自动删除
waitingMax: 2, // 允许的最大的等候客户数
waitingPageMaxRefreshInterval: 3, // 等待页面最多间隔多长时间刷新页面
generateWaitingPage: null, // 可自定义生成等待页面,如果没提供将使用默认页面
}
// waitingRoom函数可以作为标准SDK函数,供所有客户调用
const resp = await waitingRoom(request, roomID, clientID, args)
// 为方便测试,禁用浏览器缓存
resp.headers.delete('ETag')
resp.headers.delete('Last-Modified')
return resp
}
addEventListener("fetch", event => {
return event.respondWith(handleRequest(event.request))
})
注:单节点版本要求测试请求都打到同一节点上,请修改您的电脑hosts文件,地址为:61.164.119.98。