2016-11-07 30 views
0

我寫使用的NodeJS + HTML5畫布&的WebSockets節點上的JS存儲實時帆布會話數據

實時繪圖應用程序

當前服務器只是充當中繼和什麼都每個用戶繪製被廣播到的其餘部分用戶。

這裏的問題是,當新用戶出現時,他們從一個空的畫布開始。

我對如何解決這個兩個想法,

1)事件驅動的方法 - 這是我記憶中堅持每畫事件。以及新用戶何時出現在會話中。所有事件都被重建併發送給他/她。

2)服務器維護畫布的副本。因此,服務器不是隻中繼繪製事件,而是渲染所有繪製事件。當新用戶出現時,這個狀態會傳遞給它。

任何人都對這兩種方法的優缺點有了更好的理解,或者更好的解決方法!

+0

在做我的論文的同時,自己也會遇到這個問題。我使用了第二個選項,並使用redis來存儲畫布數據,以及用戶何時加入發送穿過套接字的數據。這樣每個新的連接都有屏幕上的所有數據 –

+0

@ Dennington-bear哇很高興知道我不是孤單一人。謝謝!它是否對您向用戶交付的速度有任何影響?與只是中繼相比?也想過使用redis! –

+0

我只在我的大學本地網上測試過它。但是我有大約100個客戶端運行,沒有可見的延遲。大約在120-130大關的時候我注意到了滯後。但即使如此,我出於某種原因沿着使用node.js的子進程的路線,這不是最好的方向。現在,如果我這樣做,我會更注重羣集。我覺得這會給你更多的表現,因爲我可能會在性能上造成代價高昂的錯誤。 Redis很容易成爲我的最佳選擇,但對於您的使用情況,這可能會有所不同。 –

回答

0

這是我認爲的答案。 最好的方法是讓服務器通過數據庫維護數據的副本。這意味着,無論您的客戶端何時啓動,在新客戶端啓動時丟棄數據包的情況下都會始終使用數據,並且還能夠維護舊數據。當我開發出類似的概念時,我以遊戲對象爲例,爲許多客戶帶來了不錯的回報。即使有錯誤的設計理念,也不會在本地網絡上出現明顯滯後。希望這可以幫助