HTMX - 伺服器傳送事件 (SSE)
伺服器傳送事件 (Server Sent Events,SSE) 是一種從伺服器向網頁傳送資料的方式,無需頁面重新整理或發出請求。這些事件對於建立即時應用程式(如聊天、新聞提要或通知)非常有用。使用 SSE,我們可以從我們的 Web 伺服器持續地推送 DOM 事件到訪問者的瀏覽器。
事件流方法開啟與伺服器的持久連線,並在有新資訊可用時將資料傳送到客戶端,從而無需持續輪詢。伺服器傳送事件標準化了我們如何從伺服器流式傳輸資料到客戶端。
在 Web 應用程式中使用 SSE 的方法
要在 Web 應用程式中使用伺服器傳送事件,請遵循以下步驟。
- 在文件中新增一個<eventsource> 元素。<eventsource> 元素的 src 屬性應指向一個 URL,該 URL 提供一個持續的 HTTP 連線,該連線傳送包含事件的資料流。
- URL 指向一個 PHP、PERL 或任何 Python 指令碼,這些指令碼將負責持續傳送事件資料。
示例
以下是一個 Web 應用程式的 HTMX 程式碼示例,該應用程式將期望伺服器時間。
<div id="sse" hx-sse="connect:/cgi-bin/ticker.cgi" hx-trigger="sse:message" hx-swap="innerHTML"> <div id="ticker"> Waiting for updates... </div> </div>
SSE 的伺服器端指令碼
伺服器端指令碼應傳送一個 Content-type 標頭,指定型別為 text/event-stream,如下所示。
print "Content-Type: text/event-stream\n\n";
設定 Content-Type 後,伺服器端指令碼將傳送一個 Event: 標記,後跟事件名稱。以下程式碼片段將傳送 Server-Time 作為事件名稱,並以換行符結尾。
print "Event: server-time\n";
最後一步是使用 Data: 標記傳送事件資料,該標記後跟一個整數或字串值,並以換行符結尾,如下所示。
$time = localtime(); print "Data: $time\n";
最後,以下是使用 Perl 編寫的完整 ticker.cgi
#!/usr/bin/perl
print "Content-Type: text/event-stream\n\n";
while(true){
print "Event: server-time\n";
$time = localtime();
print "Data: $time\n";
sleep(5);
}
處理伺服器傳送事件
讓我們修改我們的 Web 應用程式以處理伺服器傳送的事件。以下是最終示例。
<div id="sse"
hx-sse="connect:/cgi-bin/ticker.cgi"
hx-trigger="sse:server-time"
hx-target="#ticker"
hx-swap="innerHTML">
<div id="ticker" name="ticker">
Waiting for updates...
</div>
</div>
廣告