iT邦幫忙

0

node.js實作socket.io 狀態保存的問題

  • 分享至 

  • xImage

我想要用 node.js 使用 socket.io 套件實作一個後端
一個socket作為主機 而其他的socket會向這個主機推送資料的架構

主機的環境設想是桌機
而其他socket 設想的使用環境是手機

但是手機被網路或是誤操作導致網頁被關掉或是連結斷開讓 socket的狀態遺失的狀況可以預想到發生的機率蠻高的

而我的技術堆疊都疊在前端的部分 後端就比較沒什麼琢磨以下是我的幾個想法

想法1.
如果讓主機隨機選中三個使用者 讓他們的socket物件保存目前所在的 room中其他socket 的狀態
然後由主機同步狀態是可行的嗎

想法2.
在node伺服器端的語法寫個全域變數
用來儲存指定room中 包括主機的所有 socket
當指定事件發生時就去更新或拿這個變數裡面的資料

但我不確定所有人取到的這個變數會不會完全一樣
不知道會不會 a socket 將自己的狀態add進去之後
b socket 在讀取這個變數時 看到的依舊是全新的變數

而且有另一個問題
這個全域變數會不會因為什麼狀況 例如太久沒人用而導致變數被釋放導致資料消失

想法3.
直接用資料庫存 可是這太貴了 窩沒有鉗.jpg

froce iT邦大師 1 級 ‧ 2024-02-17 19:21:12 檢舉
1. socket還是websocket 自己搞清楚
2. 不管是socket還是websocket都只是建立連接的方式而已
3. 不管是socket還是websocket,要廣播的方式都是伺服器一個一個通知所有的連線對象,只要伺服器上的資料是對的,那就是對的。
抱歉 我指的是 Socket.io 這個套件 在內文沒有寫清楚
在node.js 上 socket.io會為了每一個 socket 建立一個物件 裡面包含這個使用者的連結資訊,所以我才會說用 socket物件作存取
所以所有的連線取得的資料,都會是那伺服器中記憶體指定位址儲存的相同資料是這樣理解嗎? 這方面我不太清楚
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2024-02-18 09:59:25

先參考這篇
搞懂之後
再看有什麼缺少的機制要補充的

我要發表回答

立即登入回答