第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 context.WithCancel 啟動和停止每個會話的心跳?

如何使用 context.WithCancel 啟動和停止每個會話的心跳?

Go
暮色呼如 2022-11-28 14:37:28
我目前正在為 TypeDB 實現(xiàn) Golang 客戶端,并且正在為他們基于會話的心跳約定而苦苦掙扎。通常,您為每個客戶端實現(xiàn)心跳,這樣相對容易,只需在后臺運行一個 gorountine 并每隔幾秒發(fā)送一次心跳。然而,TypeDB 選擇在每個會話基礎(chǔ)上實現(xiàn)心跳(他們稱之為脈沖)。這意味著,每次創(chuàng)建新會話時,我都必須開始使用單獨的 GoRoutine 監(jiān)視該會話。反之,如果客戶端關(guān)閉了一個session,我就得停止監(jiān)聽。特別難看的是,我還必須每隔一段時間檢查一次停滯的會話。切換到每個客戶端心跳存在 GH 問題,但沒有 ETA,因此我必須使會話心跳起作用以防止服務端會話終止。到目前為止,我的解決方案:創(chuàng)建一個新會話打開該會話并檢查錯誤如果沒有錯誤,將會話添加到以會話 ID 為鍵的哈希圖中這似乎暫時有效。代碼,僅供上下文參考:https://github.com/marvin-hansen/typedb-client-go/blob/main/src/client/v2/manager_session.go為了監(jiān)控每個會話,我正在考慮兩個問題:Chanel 關(guān)閉多個 gorountines 有點棘手,可能會導致競爭條件。我需要某種錯誤組來捕獲心跳故障,即在服務器關(guān)閉或網(wǎng)絡鏈接錯誤的情況下。考慮到所有這些,我相信一個context.WithCancel可能是安全和理智的解決方案。到目前為止我想出的是:將全局上下文作為參數(shù)傳遞給心跳函數(shù)為每個調(diào)用心跳的會話創(chuàng)建一個新的上下文 WithCancel在 GoRoutine 中運行心跳,直到調(diào)用取消(通過 stopMonitoring)或發(fā)生錯誤我不太清楚的是,如何跟蹤從每個跟蹤會話返回的所有取消函數(shù),以確保我關(guān)閉與要關(guān)閉的會話匹配的正確 GoRotuine?感謝您提供解決此問題的任何提示。
查看完整描述

1 回答

?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

我的兩分錢:

  1. 您可能需要反復運行心跳。time.Ticker在選擇周圍使用 for 和 a

  2. 存儲地圖會話 ID —> func() 以跟蹤所有可取消的上下文。也許你應該將 id 轉(zhuǎn)換為字符串



查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號