对于企业级即时通讯软件来说,组织架构是否支持实时刷新,将是影响用户体验的关键要素;如果即时通讯软件连组织架构都不能实时刷新和加载,对于用户来说,联系人的信息都看不到,如何沟通?如何能提高沟通效率,减少沟通成本呢?
在组织架构实时刷新的实现上,可能有的人觉得“不就是从服务器上下载组织架构吗?完整下载就行了”;实际上并不是如此,对于小型企业来说,组织架构较小,这种方式可能满足使用需求,不影响客户端使用;但是对于大型企业来说,组织架构庞大,这种组织架构同步机制弊端就暴露无遗了,如下:
试想一下,在移动网络质量不稳定的情况下,下载组织架构数据需要花费相当长的时间,若此时在客户端查看组织架构将显示为空白,那么,客户端收到新消息就无法显示发送者信息;
此外,服务器组织架构维护变更,客户端还需要等到下一个更新周期,才能显示最新数据,如果是几千或上万人的组织架构,客户端同时向服务器获取组织架构,此时服务器的负载将是巨大的。
那么,为了解决上述问题,有度即时通在组织架构更新机制上是怎样考虑的呢?
有度即时通采用了按需拉取+完整下载组织架构两种方式相结合,并且服务器组织架构服务已将组织架构数据缓存在内存中,客户端可以快速从服务器获取子部门和用户列表 。
有度即时通客户端首次登录,切换到了组织架构界面,本地组织架构为空,立即向服务器按需拉取一级部门列表并显示,底层启动异步线程下载完整组织架构。
用户展开某个部门时,此时完整组织架构未下载完成,立即通过按需拉取到服务器获取该部门的子节点(子部门和用户),并显示出来。
完整组织架构未下载完成时,接收到其他客户端发送过来的新消息时,立即到服务器上请求人员信息并显示。
完整组织架构下载到本地,后续用户切换到组织架构界面时,一级部门从本地获取并显示出来,同时底层异步向服务器检查当前部门是否发生变化,如有变化,从服务器获拉取新数据,更新到界面。
上述技术方案,利用按需拉取,无需等待全部组织架构下载完成,可立即查看当前节点的部门组织信息,减少等待时间。而下载完整组织架构,可以弥补网络中断时,也能浏览组织架构,从多个维度保证用户又快又全的浏览组织架构。
用户首次登录成功后,点击界面组织架构面板,此时界面向底层获取一级部门列表,底层检查本地数据库组织架构没有数据,调用服务器接口获取一级部门列表,服务器返回后显示到界面。
用户展开某个一级部门,流程跟上述一样,界面向底层获取该部门的子部门和用户,底层检查本地数据库该一级部门没有子部门和用户,调用服务器接口获取该部门的子部门和用户,服务器返回后显示到界面。
界面下拉获取部门的子部门和用户时,底层都将执行相同流程,检查到数据库没有该部门的子部门和用户时会向服务器获,然后返回给界面。
此外每天用户第一次上线,底层都会启动独立线程去更新完整组织架构,由于有以上机制保障,更新时间长短不影响用户正常使用。
用户点击界面组织架构面板,此时界面向底层获取一级部门列表,底层检查本地数据库组织架构不为空,直接从数据库获取一级部门列表返回给界面显示,因此用户即使在断网情况下也可以正常浏览组织架构。
在有网情况下,底层将本地数据抛回给界面后,还异步向服务器检查更新此部门节点数据,如果服务器组织架构已更新,底层将最新数据再次抛给界面,界面更新最新数据,如此一来,服务器任何时候修改组织架构,在有网的情况下,客户端都可以马上更新。
有度即时通通过按需拉取和完整下载组织架构两种方式结合,既避免了大组织架构刷新缓慢和客户端显示慢,又减轻了服务器同一时间面对客户端同步组织架构的压力,进一步优化了组织架构更新速度。