在 Web 開發中,如何讓伺服器端資料異動即時推送至客戶端,一直是個令人著迷的課題。傳統上,大多數開發者採用 JavaScript 非同步輪詢的方式,雖然實作簡單,但頻繁的請求會造成伺服器負擔。那麼,是否有辦法讓伺服器在資料變更時主動推送呢?
HTTP 協定本質上是無狀態的 Request/Response 模式,伺服器無法主動發起連線。這看似讓 Server Push 成為不可能,但透過一些技巧,我們仍能達到類似效果。博客園有位前輩分享了關於 Server Push 的實作,筆者將其代碼整理如下供參考。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ServerPushDemo.aspx.cs" Inherits="WebDemo.ServerPush.ServerPushDemo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Server Push Demo</title>
<script type="text/javascript">
function SetValue(time) {
document.getElementById("TbTime").value = time;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="text" id="TbTime"/>
</div>
</form>
</body>
</html>
這個範例展示了基本架構:前台只需一個文字框與 JavaScript 函式,後台透過特定機制將時間推送至客戶端。雖然傳統 HTTP 無法真正實現長連線,但利用 Hidden Frame、Comet 或現代的 WebSocket/SignalR 技術,均可突破此限制。理解這些演進歷程,有助於選擇適合專案的即時通訊方案。