我使用Rails創建了一個在線多人遊戲棋盤遊戲,我希望遊戲能夠在無需手動刷新頁面的情況下進行播放。我打算使用websockets或Server Sent Events來更新頁面。我還沒有確定,但我不認爲它會對我的問題產生影響。如何在Rails中觸發實時客戶端更新
我很困惑的事情是知道什麼時候發送更新到客戶端。例如,假設我正在下棋,並且player1輪到了。他們會發送他們的移動到服務器,服務器然後將其保存到數據庫。 player2的websocket或SSE如何知道將player1移動到player2的瀏覽器的信息?
我知道他們可以定期查詢數據庫以查看遊戲是否已更新,但由於每個用戶都經常查詢數據庫,因此似乎難以擴展。
是否有一種簡單的方法來等待數據庫的更新並以某種方式自動通知它?還是有其他解決方案?
我已經在網上看了一大堆解決方案,但還沒有真正得到任何具體的想法。只要是免費的,我絕對願意使用圖書館或其他方式解決問題。我見過一些付費解決方案,但這些都不是一種選擇。
我還看到有人建議以某種方式使用node.js與rails一起實時地執行某些操作。我對node.js瞭解不多,但我聽說它對於這種異步功能非常有用。如果它比任何rails解決方案都好,我會對如何使用它感興趣。
我使用的是Rails 3.2,但是如果Rails 4在這裏能夠很好地工作,我可能會對此感興趣。
FAYE似乎使用長輪詢或服務器發送的事件。是否有可能使用雙向通信,如websockets?因此,您不需要爲每個移動單獨提供http請求,而是使用相同的websocket來提交所有移動操作? – bdwain 2013-05-13 18:12:11
我的意思是使用相同的websocket來提交你所有的動作,並從遊戲頻道接收更新 – bdwain 2013-05-13 21:19:50
是的,客戶端連接到FAYE服務器,可以發送消息到服務器或從服務器訂閱(接收)事件。 – AndyD 2013-05-13 21:49:02