标签:
结构介绍:
当客户端下线的时候,客户端会发一个消息给服务端,告诉服务端,我要下线,接着,客户端就会执行下线的函数
下线函数里会执行让服务端往数据库里写客户端的数据的函数并且把这个客户端从session列表里删除。
当服务端接受到客户端想要下线的意愿的时候,也会执行下线函数。
这样做的目的是为了防止客户端意外下线,导致客户端无法执行下线函数,服务端自己往数据库里写数据。
现场日记:
在写测试用例的时候,当客户端执行下线函数之后,立马清楚数据库。接着会导致服务端依然会往数据库里写一次数据,但是此时数据库
已经被清空了,所以此时就会报错
分析过程:
从现场日记中可以很简单的分析出错误产生的原因的时候,很自然的就想到标记一下此客户端有没有被执行过下线函数。
这样做之后这个问题确实解决了。紧接着发现了另外一个问题。因为程序是多线程操作,所以发生在往数据库里写数据
执行完之前会执行到清数据库的操作,所以依然会报错。然后想到写另外一个下线服务,让数据先往数据库里写,然后
执行下线操作。然后把这个服务阻塞掉。执行完这个服务才能执行别的服务。
最终解决方案:
分析完了解决就很简单了,首先标记一下客户端有没有成功执行过下线函数。
然后写一个下线服务,把这个服务阻塞一下。
标签:
原文地址:http://blog.csdn.net/rowanhaoa/article/details/43567375