文档中心 边缘应用 创建虚拟等候室

创建虚拟等候室

更新时间: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。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!