多线程抢购秒杀程序的优化?

yizhixiaozhu 2011-05-18 01:46:00
有这样的一个案例:

电影院的抢票秒杀 : 一共有3个步骤 :

登陆进去 后

页面A第一步: 进去后系统给你分配哪一天的第几场?
页面A第二部:在本页面上面系统给出了当前可用的日期和当天可用抢购的 场次,但是要输入一个 确认码,比如 姓名、身份证号等
页面A第三步:输入了后,点击确认,确认订购抢票。完成

如果上一场抢完,则从第一步进去后,系统自动会给你安排下一场的抢票

之前的时候做了个程序,按照流程 从第一步到第三步可以抢到票,但是现在很难抢到了,不知道是不是人太多了,抢的时候服务器很慢,而且总是发出请求后,半天才反应,然后提示说已经被预定了,程序只能又从第一步开始重新获取最新的系统分配的场次和日期,但是进去后又被抢了,又的重复。

现在的时候如果想抢多张票的话,就开几个线程,一个线程抢一张,

所以有没有可优化的步骤?服务器上的web程序是asp.net做的,如果我现在增加线程,每张票我也是用多线程,

如果我要抢3张票,每张票用3个线程去抢,那一共就会有 9个线程,可能会增加抢到的可能性。

其他的方面有没有可优化的地方?

我使用的是 httpwebreqeust 来连接服务器 ,如果是Socket会不会快点?

如果不是抢票的时间段进去的话,那速度很快 ,但是如果是在抢票的时候进去的话 就非常慢。
...全文
881 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yizhixiaozhu 2011-05-20
  • 打赏
  • 举报
回复
还有高手能知道么
yizhixiaozhu 2011-05-18
  • 打赏
  • 举报
回复
是的,目的就是抢到票,因为这个时候人很多,肯定会有阻塞的,程序上的优化,我估计很难了,瓶颈主要在服务器的网络阻塞这个上面。

如果必须按照这个流程来做的话,分三步,除非直接跳到第三步,在第三步直接伪造viewstate,因为我抓包看了,那些场次和日期信息没有藏在隐藏的input里面,还有验证问题也没有隐藏在input的hidden类型里面,也没有在cookie里面,session的可能性不大,因为这样非常消耗服务器的资源,所以我估计应该是放在viewstate里面,伪造viewstate的话,就是当开始抢的时候,自然每个人进去都是开始按照顺序有系统按日期和场次来订票,我伪造的话,直接伪造第后面的剩余的场次,不知道这样可行不,估计很难,asp.net会检查这个viewstate,而且这个也不是很好伪造。


看来只能增加线程数,提高并发,这样才有可能提高抢到的可能性。

Socket和httpwebrequeset的话,估计这样的开销可以忽略。

jshzp 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yizhixiaozhu 的回复:]
楼上的意思是 线程在抢购的时候 设置该线程的超时时间,如果超时了,就直接从第一步开始?

那不是还是抢不到呀?

因为那个时候肯定是很多人,会有阻塞的,
[/Quote]
哦,看来我理解错了你的意思。你的程序是以抢到票为目的,而不管会不会导致别人的堵塞,对吗?如果是这样,那我还想不到什么好主意。这种情况只能考虑提高你程序的运行性能了。
至于Socket和httpwebreqeust哪个性能更好,你做实验对比下,不就清楚了?因为比较理想化,理论上分析出来的结果,实际使用中并不见得是那么回事儿。
yizhixiaozhu 2011-05-18
  • 打赏
  • 举报
回复
楼上的意思是 线程在抢购的时候 设置该线程的超时时间,如果超时了,就直接从第一步开始?

那不是还是抢不到呀?

因为那个时候肯定是很多人,会有阻塞的,

jshzp 2011-05-18
  • 打赏
  • 举报
回复
关于并发的抢购事件多了,发生阻塞的情况,给楼主个处理策略的建议:
每个线程遇到阻塞时,(可通过超时来判断)采取随机延时的办法避免再次阻塞。随机的概率可以在0~T时间段内平均分布。
am 2011-05-18
  • 打赏
  • 举报
回复
应该是网络阻塞
yizhixiaozhu 2011-05-18
  • 打赏
  • 举报
回复
如果流程没有可优化的地方的了话,看来只能增加线程,还有增加服务器啥的,来抢了

龍过鸡年 2011-05-18
  • 打赏
  • 举报
回复
去搜索设计模式
bdmh 2011-05-18
  • 打赏
  • 举报
回复
人多,网络阻塞,可能的

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧