A操作时,存服务器SESSION中
一个月前在广州华讯公司(电信分公司)的一道面试题:
请问一个购物的BS平台,客户A和客户B“同时”看上了一件商品,商品的数量是10件。
客户A购买了这件商品7件,此时客户B的页面上还是显示“10”件商品。
请问用什么办法让客户B知道商品的数量已经发生了变化,只有3件???
要求:最好不要对数据库进行操作(如:客户B购买时查询数据库、在数据库中锁定当前数据),
但是可以谈谈解题的思想。
个人要求:如果有涉及到数据库方面的操作但解题方法很奇妙的也可以说说看。
各位牛人、大侠都发表下看法或思路!!!
SESSION随A的操作init和destroy
用filter在B操作前拦截
可能session不够大
初次听说长连接,学习。来长长见识用Ajax做,在购买前去数据库查现有值,大于购买值的话直接提交,否则的话提示并刷新现有值。我觉得14楼的意见可以存服务器session中?一件物品一个定时器。
那样估计你的浏览器都会要挂了吧。。
采用观察者模式,当值发生变化时,及时通知各个操作该数据的用户!学习了,听起来观察者模式挺好的,只是不知道如何实现呢?页面定时发送请求
设置一个刷新时间来修改页面中的某些数据因为HTTP是无状态的,所以目前大部分采用的非HTTP协议。可以用UDP或其它。
长连接也可以用spring aop 好像也有可以做什么preConstruct****这个方法的处理吧?单服务器的话,建立一个被锁定商品数量的全局静态HASH字典。长连接需要用到activeX空间吧,要不就要用到applet,不过applete已经用的不多了,而且要做签名我的思路如下:
html长连接.对每一个打开商品的用户给予一个长连接.当客户A购买商品7件成功后,立刻通过长连接给予用户B或用户C......的显示商品数量为3或其它提示.通过长连接可以准时准确的给予提示.当用户关闭商品查阅页长连接也会断开.
长连接解决此问题的优点:及时有效.避免了对数据库操作,避免了用户B操作后才告知商品的剩余数量
缺点:长连接的web和应用服务器性能不稳定.不过可以参考FLASH的通讯协议.
线程问题。实现序列化了解 了解 ,看看 长连接 长连接思路不错。ajax做动态页面修改,B提交时和数据库数量进行比较可以采用服务器推技术,当A客户购买商品以后,服务器主动将更新后的商品数量推到其他客户上
具体使用方式查看:
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/在现实中,电子商务网站应该很少有这样的要求,因为如果网站流量大的话,有很多人浏览这件商品,而要做到商品剩余数量的动态现实,一般是通过ajax来实现,这样做会加重服务器的负担,所以这样的讨论实际意义并不是很大!还是通过数据库来完成是最好!用js定时器呢?线程问题。实现序列化