你有没有注意到,如果你在浏览器中设置一个计时器, 你的时间表会显示你手机里的新计时器, 或者在免费冰球突破网站的任何桌面应用程序中? 不需要重新加载或手动刷新, 它只需要一段时间,让你的任何一个收获应用程序同步.

如果您是正在查看或编辑其他用户时间表的管理员, 您还将看到该时间表的实时更新, 是否由时间表的所有者制作, 或者你自己. 否则会很混乱! 这些实时的时间表更新防止了不正确的数据,并消除了时间跟踪中的许多摩擦.

15年前,在收获最初发布后不久,免费冰球突破网站就需要实现实时更新, 因为相同的时间表可以从不同的浏览器或浏览器选项卡查看和编辑. 免费冰球突破网站发布了iPhone应用, 没有任何借口——免费冰球突破网站需要实现一种方法,让免费冰球突破网站的时间表数据在所有应用程序和浏览器之间保持一致.

免费冰球突破网站在不同设备间保持时间表新鲜的第一种方法是使用轮询. 轮询很简单:免费冰球突破网站只需要让浏览器和移动应用程序在给定的时间间隔内请求服务器的时间表更新. 但如果免费冰球突破网站让应用每隔几秒就要求更新一次, 这将给免费冰球突破网站的服务器增加额外的负载, 设备本身. 如果免费冰球突破网站将轮询间隔设置为一分钟或更长时间,应用程序将感觉没有响应.

免费冰球突破网站发布了针对安卓、Mac和Windows的应用,并添加了整合 收割按钮和小部件免费冰球突破网站的客户开始使用更多的设备来跟踪一天中的时间. 如果免费冰球突破网站想要支持免费冰球突破网站的应用和集成生态系统,轮询是低效且不可持续的

免费冰球突破网站转而使用推送更新到浏览器和应用程序 免费冰球突破网站使用Node将其构建为一个单独的服务.js. 随着时间的推移,免费冰球突破网站使用的所有平台都增加了优点 支持服务器发送事件 (SSE). 尚允许服务器和客户端之间的双向通信, 而使用SSE时,只有服务器可以向连接的客户端推送事件.

SSE中的特性对于免费冰球突破网站的用例已经足够了, 管理SSE连接的生命周期比使用尚要简单一些. 这是免费冰球突破网站当前生成、传输和推送支持实时时间表更新的事件的方式:

blog-image-eng

  1. 收获为应用程序的每个操作生成一个事件:启动或停止计时器, 创建一个项目, 编辑用户, 等.
  2. 这些事件通过Pub/Sub服务推送. 免费冰球突破网站使用这个服务和一组Pub/Sub消费者来支持几个内部服务, 以及免费冰球突破网站的一些积分, 就像 松弛.
  3. 针对实时更新的具体情况, 消费者读取事件并使它们对SSE / 尚服务可用.
  4. SSE / 尚服务将该事件中继到所有需要更新的连接浏览器/应用程序. 这包括时间表所有者, 和任何管理员, 如果这些用户中的任何一个当前连接到接收实时时间表更新.

SSE API有一些特性,可以让免费冰球突破网站的连接客户端更容易地推送事件:

  • 当客户端(浏览器或应用程序)加载时间表时, 它还使用免费冰球突破网站的尚 / SSE服务启动一个SSE连接 事件源.
  • 如果连接丢失,客户端将自动重新连接到事件源.
  • SSE API就是HTTP, 因此,免费冰球突破网站可以使用收获中现有的会话来验证连接的客户端.
  • 好的旧HTTP意味着免费冰球突破网站不需要外部库, 免费冰球突破网站可以用自己的几行代码向客户端发送事件.

免费冰球突破网站SSE / 尚服务中的大部分逻辑都集中在是否应该将给定事件转发给给定连接的客户端上, 根据:

  • 事件类型:用于实时更新, 免费冰球突破网站需要接收定时器启动/停止事件, 定时器编辑和删除, 等., 还有项目活动, 任务, 项目分配, 因为它们影响了跟踪时间的可用选择. 
  • 客户端连接到的时间表:如果管理员在给定的客户端上查看另一个用户的时间表, 没有必要将管理员自己的时间表的事件转发给该客户端.
  • 连接到当前客户端的用户权限. 目前,只有管理员可以查看其他用户的时间表. 但是在未来,manager可能会部分访问其他用户的时间表. 在这种情况下, 只有当项目经理是PM时,项目中的事件才会被转发给客户.

实时时间表更新已经投入生产好几年了, 自从几年前免费冰球突破网站转投上交所以来,免费冰球突破网站一直顺风顺水. 因为实时更新在大多数情况下都是有效的,也许你之前没有注意到它们. 但如果你知道了,现在你就会知道到底发生了什么!