<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Durable-Objects on BenzHub</title><link>https://benzhub.github.io/tags/durable-objects/</link><description>Recent content in Durable-Objects on BenzHub</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Tue, 25 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://benzhub.github.io/tags/durable-objects/index.xml" rel="self" type="application/rss+xml"/><item><title>DO Alarms 定時器:讓每個物件自己醒來做事 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/025-do-alarms/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/025-do-alarms/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;DO SQLite Storage&lt;/strong&gt;》,我們讓 &lt;strong&gt;Durable Object&lt;/strong&gt; 能建表、查詢、做原子交易,成了一個有結構的有狀態服務。但它還缺一種能力:&lt;strong&gt;在未來某個時間點「自己醒來」做事&lt;/strong&gt;。這一篇,我們深入 &lt;strong&gt;Cloudflare&lt;/strong&gt; 的 &lt;strong&gt;DO Alarms&lt;/strong&gt;——每個 &lt;strong&gt;Durable Object&lt;/strong&gt; 私有的&lt;strong&gt;定時器&lt;/strong&gt;。你會學到 &lt;code&gt;ctx.storage.setAlarm&lt;/code&gt; / &lt;code&gt;getAlarm&lt;/code&gt; / &lt;code&gt;deleteAlarm&lt;/code&gt; 與 &lt;code&gt;alarm()&lt;/code&gt; handler、如何用「在 alarm 內重新排程」實作&lt;strong&gt;週期性任務&lt;/strong&gt;、靠平台的&lt;strong&gt;自動重試&lt;/strong&gt;做到可靠執行、用&lt;strong&gt;去抖動批次聚合&lt;/strong&gt;省下大量寫入,並徹底分清 &lt;strong&gt;Alarms&lt;/strong&gt;(每實例)與 &lt;strong&gt;Cron Triggers&lt;/strong&gt;(全域)的差別。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>DO SQLite Storage:每個物件內建的資料庫 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/024-do-sqlite-storage/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/024-do-sqlite-storage/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;Durable Objects 入門&lt;/strong&gt;》,我們用最簡單的 &lt;code&gt;ctx.storage.get&lt;/code&gt;/&lt;code&gt;put&lt;/code&gt; 讓計數器把值存下來。但那只是冰山一角——&lt;strong&gt;Cloudflare&lt;/strong&gt; 的每個 &lt;strong&gt;Durable Object&lt;/strong&gt; 其實都&lt;strong&gt;內建一個完整的 SQLite 資料庫&lt;/strong&gt;,能跑同步 &lt;strong&gt;SQL&lt;/strong&gt;、建索引、做原子&lt;strong&gt;交易&lt;/strong&gt;,而且讀寫延遲趨近於零。這一篇,我們深入 &lt;code&gt;ctx.storage&lt;/code&gt;:分清 &lt;strong&gt;KV-style API&lt;/strong&gt;(&lt;code&gt;get&lt;/code&gt;/&lt;code&gt;put&lt;/code&gt;)與 &lt;strong&gt;SQL API&lt;/strong&gt;(&lt;code&gt;ctx.storage.sql.exec&lt;/code&gt;)、學會用 &lt;code&gt;transactionSync&lt;/code&gt; 做原子交易、用 &lt;code&gt;new_sqlite_classes&lt;/code&gt; 啟用 SQLite backend,並把最重要的一個決策講透:&lt;strong&gt;DO+SQLite 與 D1 到底該怎麼分工&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Durable Objects 入門:邊緣上的有狀態協調 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/023-durable-objects-intro/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/023-durable-objects-intro/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;D1 Time Travel 與備份&lt;/strong&gt;》我們為資料庫補上最後一道防線,也就此告別「資料表」的世界。這一篇,我們踏進 &lt;strong&gt;Cloudflare&lt;/strong&gt; 上更強大的&lt;strong&gt;有狀態運算&lt;/strong&gt;基元——&lt;strong&gt;Durable Objects(持久物件)&lt;/strong&gt;。無狀態的 &lt;strong&gt;Worker&lt;/strong&gt; 擅長處理獨立請求,卻無法讓多個用戶端「對同一份狀態」達成一致。&lt;strong&gt;Durable Objects&lt;/strong&gt; 用一個關鍵保證解決這件事:對同一個名稱,全球只有&lt;strong&gt;一個&lt;/strong&gt;活躍實例,並以&lt;strong&gt;單執行緒序列化&lt;/strong&gt;執行,天然消除競態條件。這篇是 DO 系列首篇,我們先把「什麼是 DO、為何需要它、怎麼取得並呼叫它」講透,寫出你的第一個計數器。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>