Mercure-Hub: 開始使用 Mercure-hub
本文件是入門指南指南的一部分。請在此處查看完整指南:如何開始使用 Mercure-hub。
👋 歡迎來到 Stackhero 文件中心!
Stackhero 提供全代管的 Mercure-Hub cloud 服務,專為簡化並提升即時資料傳遞的可靠性而設計。您將享有:
- 無限制的請求與訊息大小,彈性無窮。
- 具備內建 HTTPS 安全性的自訂網域(例如,https://real-time.your-company.com)。
- 一鍵更新,讓您的 hub 隨時保持最新,無需繁瑣操作。
- 在專屬私有基礎架構上,享有高效能與強大安全性。
- 多區域支援:🇪🇺 歐洲與🇺🇸 美國,實現低延遲傳遞。
快速啟動:只需 5 分鐘即可部署您的 Mercure-Hub cloud hosting 環境,立即開始為您的應用程式推送即時更新。
在客戶端(您的前端),只需使用 HTML5 SSE API 的簡單 JavaScript 代碼即可。
注意:在此示例中,訂閱者未經身份驗證。要使此示例生效,您必須在 Stackhero 儀表板上允許匿名訂閱者。
const endpoint = '<XXXXXX>.stackhero-network.com';
const url = new URL('https://' + endpoint + '/.well-known/mercure');
// 添加要監聽的主題
url.searchParams.append('topic', `https://${endpoint}/users/1234`);
url.searchParams.append('topic', `https://${endpoint}/books/1`);
const eventSource = new EventSource(url);
// 每次發布更新時調用回調函數
eventSource.onmessage = e => console.log(e);
在服務器端(您的後端),當您想要分發更新時,只需向 Mercure-hub API 發送 POST 請求。以下是使用 Node.js 以及 JsonWebToken 和 Request 庫的示例:
const jwt = require('jsonwebtoken');
const request = require('request');
const endpoint = '<XXXXXX>.stackhero-network.com';
const publisherJwtKey = '<your publisher JWT key>';
// 定義要分發的數據
const data = {
// 數據將被推送的主題
topic: `https://${endpoint}/books/1`,
// 要發送到主題的數據
data: JSON.stringify({
available: false,
date: new Date()
})
};
// 生成 bearer token
const bearer = jwt.sign(
{ mercure: { publish: [ data.topic ] } },
publisherJwtKey,
{
expiresIn: 60, // Token 在一分鐘後過期
noTimestamp: true // 不包括 'issued at' 時間戳以避免 "Token used before issued" 錯誤
}
);
// 將數據發送到 Mercure-hub,以便它將更新分發給客戶端
request.post(
{
url: `https://${endpoint}/.well-known/mercure`,
auth: { bearer },
form: data
},
(err, res) => err ? console.error(err) : console.log(res)
);
就是這樣!您現在有一個在前端的訂閱者和一個在後端的發布者無縫協作。