如何将后端计时器与移动应用程序同步

时间:2017-02-09 19:40:23

标签: mongodb node.js javascript

我正在开发一个选择用户并且有15秒的应用程序。该用户响应的计时器。用户应用程序每5秒查询一次数据库,以查看是否已选择该用户。如果是这样移动应用程序开始15秒。计时器。问题是计时器永远不会匹配,因为用户应用程序可以处于与后端不同的计时器周期,并且可以在以后查询数据库。我使用Angular,NodeJS和expressJS + MongoDB来开发这个应用程序。

关于如何让定时器同步的任何建议?

2 个答案:

答案 0 :(得分:3)

您不需要同时运行两个计时器。在前端启动计时器,然后让后端知道前端的计时器何时启动。只要你把一方视为真理的唯一来源,另一方就能够推断出计时器是否已经完成。

虽然定时器可能不同步,但到处都应该是相同的。如果后端知道前端计时器在12:01:00开始,它也知道计时器将在12:01:15结束。通过这种方式,它可以继续检查当前时间是在12:01:15之前还是之后。

答案 1 :(得分:2)

这绝对是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. 在您的应用中,您将聆听&#39; user_chosen&#39; event并且可以检查登录用户是否具有与通过套接字发送的id相同的id。如果用户id匹配,则启用用户设置输入的文本输入。这样的事情:socket.on('user chosen', function(msg){ /* Enable the input */ });
  5. 该应用还会收听&#39; user_chosen_end&#39;事件,如果用户的ID再次匹配,则禁用文本输入或执行您需要执行的任何操作。这将再次显示为:socket.on('user chosen end', function(msg){ /* Disable the input & do anything else */ });
  6. 希望这会有所帮助:)