實時功能怎麼做提示詞(WebSocket、SSE、輪詢怎麼選,斷線重連、心跳、多實例消息廣播)
要做消息通知、訂單狀態實時更新、在線聊天、AI 回答流式輸出、大屏數據刷新這類實時功能時用:AI 根據場景在輪詢、SSE、WebSocket 之間做選擇,並設計連接鑑權、心跳、斷線重連與消息補償、多實例部署下的消息分發和容量評估。
通用大模型 對話模型通用
你是一名做過大規模實時系統的後端架構師。請為下面的實時功能設計技術方案。 - 功能描述:[功能描述](例:訂單狀態變化後,用戶頁面實時更新) - 通信方向:[通信方向](例:只需服務端推送,或需要雙向通信) - 規模:[規模](例:同時在線 2 萬人,每秒推送 500 條) - 對實時性和可靠性的要求:[實時性要求](例:秒級,消息不能丟) - 技術棧與部署:[技術棧與部署](例:Node.js 多實例 + Nginx + Redis) 請輸出: 1. 方案選擇:對比短輪詢、長輪詢、SSE、WebSocket 在這個場景下的優缺點(實現複雜度、伺服器資源、穿透代理與防火牆、瀏覽器支持、是否需要雙向),給出推薦。只需服務端推送時,說明 SSE 是否足夠。 2. 連接管理: - 建立連接時的鑑權方式(以及令牌過期後的處理),避免把令牌放在可能被記錄的地址中; - 心跳:間隔多長、由誰發起,以及代理和負載均衡的空閒超時設定; - 斷線重連:指數退避加隨機抖動,避免服務重啟後所有客戶端同時重連。 3. 消息可靠性:斷線期間的消息如何補發(消息序號、客戶端記錄最後收到的序號、重連後拉取缺失消息);需要時的消息確認機制。 4. 多實例部署:用戶連接分佈在不同實例上時,如何把消息投遞到正確的實例(例如通過發佈訂閱進行廣播或按用戶路由);負載均衡是否需要會話保持。 5. 容量評估:單實例能承載的連接數取決於哪些因素(內存、文件描述符、事件循環),需要調整哪些系統參數,如何壓測。 6. 降級:實時通道不可用時退回輪詢。 7. 給出服務端和客戶端的核心代碼(含重連與心跳)。
高亮處換成你自己的內容:[功能描述]、[通信方向]、[規模]、[實時性要求]、[技術棧與部署]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:[通信方向] 是選型的關鍵:只需要服務端推送(通知、狀態更新、AI 流式輸出)時,SSE 實現更簡單,基於普通 HTTP,更容易通過各種代理;需要客戶端頻繁發送消息(聊天、協同編輯)時才需要 WebSocket。[規模] 用來評估單機連接數和是否需要專門的推送服務。
常見坑:
- 部署多實例後,用戶 A 連在實例 1、消息卻在實例 2 產生,消息就送不到。需要發佈訂閱或路由機制把消息分發到正確的實例。
- 代理或負載均衡預設的空閒超時較短,沒有心跳的連接會被悄悄斷開,客戶端卻以為還連着。
- 服務重啟後所有客戶端在同一秒重連,形成連接風暴。重連要加隨機延遲。
追問技巧:追問「設計一個壓測方案,驗證單實例能否承載 5000 個長連接」,或「用戶同時打開多個標籤頁時,如何避免重複連接和重複提醒」。
示例輸出
示例,僅供參考(訂單狀態推送,節選)
推薦:SSE。只需服務端推送,基於普通 HTTP,瀏覽器原生支持自動重連,並且可以通過最後事件編號實現斷線補發。
多實例分發:訂單服務狀態變化 → 發佈到 Redis 頻道 → 每個推送實例訂閱該頻道 → 只推送給本實例上該用戶的連接。
js
// 客戶端:瀏覽器斷線後會自動重連,並在請求頭中帶上最後收到的事件編號
const es = new EventSource('/api/stream/orders', { withCredentials: true })
es.addEventListener('order-status', (e) => {
const data = JSON.parse(e.data)
updateOrderRow(data.orderId, data.status)
})
es.onerror = () => showBanner('連接中斷,正在重連…')
js
// 服務端(Node.js):定期發送註釋行作為心跳,防止代理斷開空閒連接
res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', Connection: 'keep-alive' })
const timer = setInterval(() => res.write(': ping\n\n'), 25000)
req.on('close', () => clearInterval(timer))同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~