最終更新日:2024-09-03 17:00:41
この例では、Edge Cloud Apps関数を使用して、Webサイトの特定のページへのアクセスを制御する仮想待合室を実装する方法を示します。これは、Eコマースのプロモーション、製品の発売、コンサートチケットの販売中など、高トラフィックの急増が予想される場合に特に役立ちます。仮想待合室は、ユーザーアクセスを管理し、突然のトラフィックの急増によってオリジンサーバーが過負荷になるのを防ぎます。
この例では、ペットショップのWebサイトの「チーム」ページをシミュレートし、そのための仮想待合室を設定します。待合室では、最大1人の同時訪問者(正常に入室すると15秒間の直接アクセスウィンドウ)と2人のキューサイズが許可されます。 簡略化された単一マシンのテストでは、「クライアントIP +ユーザーエージェント」が固有のクライアント識別子として使用されます。
import { waitingRoomSingle } from "./wslib-waiting-room-single"
async function handleRequest(request) {
const headers = request.headers
const url = new URL(request.url)
const clientID = headers.get("cdn-src-ip") + headers.get("user-agent") // アクセスターミナルを識別するためにクライアントが決定します
if (!clientID) {
return fetch(request) // ターミナル識別子がない場合、待合室ロジックを適用できません
}
const roomID = url.hostname // クライアントがどのURLスコープが待合室を共有するかを決定します
const args = {
connectedTimeout: 15, // 接続プールに挿入されたデータが自動的に削除されるまでの期間
connectedMax: 1, // 許可される最大接続クライアント数
waitingTimeout: 30, // 待機プールに挿入されたデータが自動的に削除されるまでの期間
waitingMax: 2, // 許可される最大待機クライアント数
waitingPageMaxRefreshInterval: 3, // 待機ページを更新する最大間隔
generateWaitingPage: null, // 待機ページを生成するためのカスタマイズ可能なコードです。提供されない場合は、デフォルトのページが使用されます
generateBusyPage: null, // ビジーページを生成するためのカスタマイズ可能なコードです。提供されない場合は、デフォルトのページが使用されます
}
const resp = await waitingRoomSingle(request, roomID, clientID, args)
// テストの便宜上、ブラウザのキャッシュを無効にします
resp.headers.delete('ETag')
resp.headers.delete('Last-Modified')
return resp
}
addEventListener("fetch", event => {
return event.respondWith(handleRequest(event.request))
})
generateWaitingPage
とgenerateBusyPage
をカスタマイズして、それぞれパーソナライズされた待機ページとビジーページを表示することもできます。