怎样进行ISAPI的配置,使它优化。(100分)

  • 主题发起人 主题发起人 慕容乾坤
  • 开始时间 开始时间

慕容乾坤

Unregistered / Unconfirmed
GUEST, unregistred user!
我用C++做了一个ISAPI的程序,从数据库中提取一些信息,还有些别的操做。但是发布以后
比较正常的使用还没有问题,一旦有些破坏性的测试,比如连续点击某一个链接到DLL的
超级联接,WEB服务器就基本死掉了,所有的请求得不到回应了,只能重新启动。
有没有熟悉ISAPI的,旁我分析一下是什么原因?
我在程序中没有使用基本没有使用全局变量,除了两个数据库对象(CDatabase)和
数据集对象(CRecordset)。
 
纪录用户的ip地址,如果是两次点击时间小于三秒,则选择不响应。
 
to Adnil:
怎样实现?
 
多加一张表,里面记录ip地址,提交时间
然后响应的时候查询,如果是非法的就不管了
 
你的database和recordset放在什么地方创建?
 
类的私有变量
 
我的意思是什么地方创建的,你要考虑你的database如果每次请求创建或者连接一次数据库
就会会很慢,而如果所有请求共用一个recordset则可能引起线程之间的冲突
 
是在定义类的时候直接创建的。在类的成员函数中使用这些对象。
你说得非常正确,我查了很多资料,MFC创建的ISAPI的扩展确实有线程安全的问题。
我本以为是IIS自动管理线程的访问,现在看来还是得自己创建临界量来管理并发访问数据库。
Pipi.你有这方面的经验吗?
 
我写过,没有这个问题呀!有就是3个iexplorer连续刷,只是当时不响应,一旦停下来,
马上响应了,不会重新启动IIS!
 
是吗?
你的程序主要是干什么的?
是访问数据库的吗?
 
你的数据库是用bde还是ado?如果是bde那么自己管线程保护
如果是ado,那么database是线程安全的,
database创建一次,recordset可以每个请求创建一个,共用一个database
当然并发用户很多的话,database可以事先弄几个,然后轮流用(平均分配)
 
to Pipi.:
早知道就在做项目之前和你谈谈
:)
我用的是ODBC,查了很多书才知道:确实必须得自己管理线程安全(线程是IIS分配的)。
我的问题已经解决了,就是在入口函数中加入临界量的控制,如果是多个DLL,则可能就得
用信号量去控制了。
不过也的感谢Pipi.和其他的人.
 
多人接受答案了。
 
后退
顶部