前端流式(stream)請求,獲取持續響應的方式

在網頁開發中,「前端的流式(streaming)請求」指的是一種資料傳輸方式,它允許程式碼從遠端伺服器接收持續的資料串流,而不是一次性下載全部內容後再進行處理。這種方法特別適用於大規模或無限量資料的傳輸,例如即時訊息、視頻串流、數據監控系統等等。以下將詳細介紹前端如何透過流式請求來獲取不斷更新的資料:

1. HTTP長連線與短連線

HTTP是一種基於請求/響應模式的協議,傳統上,每次請求都會建立新的TCP連接,完成任務後立即關閉。這稱為「短連線模型」。隨著技術發展,人們發現某些應用場景需要更高效且實時的資料傳輸,因此提出了「長連線模型」的概念。在長連線模式下,客戶端會保持與服務器的連線開啟狀態,直到某個條件被滿足才終止連線。

2. WebSockets

WebSocket是HTML5中的一項功能,它提供了一種全雙工、低延遲的通訊通道,可以實現真正的兩向流式傳輸。當一個WebSocket連線建立之後,雙方都可以隨時發送資料給對方,而不需要重新建連結。這使得即時應用程序(如聊天室、遊戲、股市行情更新)變得更加順暢和可靠。

var ws = new WebSocket('ws://example.com:80/path');
ws.onopen = function() {
console.log('Connected to the server!');
};
ws.onmessage = function(event) {
console.log('Received message from server:', event.data);
};
// Send a message to the server
ws.send('Hello, world!');

3. Server-Sent Events (SSE)

Server-Sent Events是一種單方向的事件推送機制,由HTML5標準定義。使用SSE時,瀏覽器會打開一個到服務器的持久連接,並等待來自服務器的資料更新。這些更新通常以事件的形式出現,並且格式化為JSON或其他易於解析的格式。

<script>
function handleEvent(e) {
document.getElementById('output').innerHTML += e.data + '<br>';
}
</script>

<div id="output"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<script>
$(document).ready(function(){
$.EventSource('/events', {withCredentials: true}); // 設置跨域資源共享(CORS)頭部
$('body').append('<div>' + $.now() + ' : Event Source Connected.

为您推荐