2017-02-09 32 views
2

我正在開發一個選擇用戶的應用程序,並具有15秒的時間。定時器爲該用戶做出響應。用戶應用程序每5秒查詢一次數據庫以查看是否選擇了該用戶。如果是這樣的移動應用程序開始15秒。計時器。問題是定時器永遠不會匹配,因爲用戶應用程序可以在不同的計時器週期上與後端不同,並且可以在以後查詢數據庫。我使用Angular,NodeJS和expressJS + MongoDB來開發這個應用程序。如何將後端計時器與移動應用程序同步

有關如何讓定時器同步的任何建議?

回答

1

這絕對是一個websockets的工作!與HTTP不同的Websockets支持雙向數據流,因此您的服務器和客戶端可以實時交談。 Socket.io是一個非常流行的框架,可以實現這種交互,並真正無縫地連接到節點/表達式。

http://socket.io/

這裏是讓你開始http://socket.io/get-started/chat/的教程。

基本流程將是

  1. 打開用戶和服務器之間的插座。
  2. 當用戶被選中(我假設在服務器端),然後做一個io.emit('user chosen', { userId: '<the user id>' });。這將通過套接字發送一條消息給所有連接的應用程序。
  3. 啓動服務器上的定時器併發送期間結束的信息。像這樣的東西應該工作。 setTimeout(() => socket.emit('user chosen end', { userId: '<the user id>' }), 15000);
  4. 在您的應用程序中,您將聽取'user_chosen'事件,並可以檢查登錄用戶是否具有與通過套接字發送的相同的ID。如果用戶ID匹配,則爲用戶啓用文本輸入以設置輸入。類似這樣的:socket.on('user chosen', function(msg){ /* Enable the input */ });
  5. 該應用程序還將偵聽'user_chosen_end'事件,如果用戶的ID再次匹配,則禁用文本輸入或執行其他任何您需要的操作。同樣,這將是這樣的:socket.on('user chosen end', function(msg){ /* Disable the input & do anything else */ });

希望這有助於:)

+0

好吧,這太好了!唯一值得關注的是我試圖小心數據使用。你認爲這會在手機上造成大量數據使用嗎?還有可擴展性,這是可擴展的嗎?或者是否需要在後端有很多應用程序節點來支持數千用戶? –

2

你不需要在同一時間運行兩個定時器。在前端啓動一個定時器,然後讓後端知道前端定時器何時啓動。只要你將一方當作真相的唯一來源,另一方就可以推斷計時器是否完成。

雖然定時器可能不同步,但時間應該是無處不在。如果後端知道前端定時器在12:01:00開始,它也知道定時器將在12:01:15結束。這樣,它可以繼續檢查當前時間是在12:01:15之前還是之後。

+0

好主意我喜歡它!謝謝@vanev_ –

相關問題