即时通讯是目前internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,那么今天主要针对QQ好友在线状态/QQ群友在线状态功能出发,一起思考其中的实现原理以及我们如何去测试此功能?
当大家在使用QQ的时候,是否和我一样有如下疑问:
我带着这些问题,去搜集了一些资料进行了解、学习和总结后,现分享给大家。
关于QQ好友在线/离线状态我所理解的流程是:
针对上面的流程主要考虑的测试点如下:
等等...大家可以想想需要测试的功能点,要了解开发实现的过程,尽可能的去覆盖测试点。
写到这里,其实其中还有一个重要的点:比如用户A的好友用户B在线,突然,用户B离线了,那么用户A能否立即看到好友由在线变成离线呢?这也是我们测试人员需要考虑的功能点!到底是不是实时的我也不能确定,如果有人知道的话可以分享下。如果对实时性要求较高,可以采用推送的方式同步,如果实时性要求不太高的话,可以采用轮询拉取的方式进行同步。
再普及下轮询拉取方式和推送方式,如下:
举例说明:用户userid-A要看到好友的在线状态的话,比如就要每分钟轮询向服务器拉取全部好友的在线状态。缺点就是:有一分钟的延迟,同时当好友的状态期间没有变化时也请求服务器拉取产生大量的无效请求暂用服务器的资源。这种方式可能大家在工作中也经常用到,不断的轮询获取服务器的信息。
继续举例说明:还是用户userid-A要看到好友用户userid-B在线状态的话,当用户userid-B下线时,由在线变成离线(更新缓存为offline),同时要将这个状态改变的通知推送给用户userid-B的在线反向好友。这样就变成实时了,但是缺点就是:在线好友量大的话,任何一个用户状态的改变会扩散很多实时通知,需要考虑承载能力。
大家可以思考下,QQ群友的在线同步应该是怎样的流程呢?到底是使用轮询的方式还是推送的方式呢?后续如果有时间的话可以继续讨论。
测试架构师论坛:http://www.youxitest.com
了解更多请关注微信公众号:测试架构师