★★★★ 我的项目被K了,总结了一些问题,欢迎大家讨论和关注。 ★★★★

dsclub 2004-06-06 11:14:01

项目是一个B/S的投票系统。
很简单:
Asp+Access2000 用ADO进行的连接。

测试环境:
局域网
服务器:Win2K Server+IIS
客户端:IE6
20个客户端同时进行

问题在于
1、对结果的反馈上:
我是用XMLHTTP来做的无刷新显示页面,说白了,每个客户端每秒都要对数据库进行一次Select,并返回结果集,然后格式化输出。
如果只是要这个时时显示的效果还好啦,代码在客户端可以稳定运行。

2、数据提交:
其实数据量并不大,用JScript操作,对投票的结果用Array保存,toString后Post到一个Asp页面,写入数据库!考虑到并发性的控制,我用Con的事物处理来做的!
可是即便如此,当有3-4人同时提交数据库后客户端就处于暂时的假死机状态!而后,返回的是HTTP超时,或者是脚本超时!

3、显示统计结果:
提交数据到数据库后,如果可以正常Conn.CommitTrans后将自动跳转到显示统计结果的页面。
这个页面是个静态页面,用XMLHTTP没0.8秒取一次数据。
-------------------------------------------------

以上描述了问题的现象

下面是我总结的一些问题:
1、用Access Jet Engine进行连接的mdb文件,它的并发处理能力到底如何?
2、我不愿相信,如果只有10几个用户一同提交数据数据库就挂了!所以我又猜想是我的IIS设置上有问题,但是问题究竟在哪里我可就真的不晓得了。
3、发生错误只有在提交时才发生,但是我的的确确用ADO的事物处理来做了!但是如果是脚本超时,那么根据Err的情况来进行事物的提交看来是不可靠的了,但是,这样的确保证一个客户提交到数据库的数据是完整的,不会INSERT了100条,确只有几十条被存到数据库。所以事物处理还是必要的。
4、XMLHTTP到底是不是一个值得应用的技术。
因为20个客户端每个都是0.8秒从服务器的数据库里SELECT出符合条件的数据再走HTTP返回来,这样服务器的压力岂不是很大,就因为这样可以无刷新,但是代价太不划算了。
5、关于HTC的问题。
如果用Asp动态生成的页面里,比如在需要style的<TD>标签里写style,再写Jscript的处理是可以的,但是那样感觉上代码很笨重!所以我用HTC进行了封装。但是,一个比较有意思的事情发生了,在客户浏览器上,显示页面时,鼠标不断的闪动[确切的说是鼠标在正常和后台两个形状之间频繁交替]。这样虽然是代码的可维护性高了,但是显示的速度慢了。对次,我不清楚造成这一现象的原因,难道是因为对于HTC是外连接的文件所以没用到这样一个class时,都要连接一次?如果这样的话,那只是影响显示速度而不影响传输速度是吧。而且,毕竟这样的两个文件比一个个的写style的一个页面文件要小!

以上5点是我这几日来总结的一些问题,希望大家积极讨论,并帮我解决。
对于4、5两点我真的不是很通,所以可能是我自己的认识不够或错误。请予以指正!
...全文
533 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsclub 2004-08-11
  • 打赏
  • 举报
回复
<![CDATA[
好问题,mark先。
]]>
galaxywaif 2004-06-09
  • 打赏
  • 举报
回复
不懂了,顶一下:)
dsclub 2004-06-09
  • 打赏
  • 举报
回复
myfun不会发生问题的,客户段配有都是可以了,而且IE6充分做了保证…………


话说回来了,我这个东西是要投5次的,前三次是成功的…………


郁闷………………
xzq686 2004-06-09
  • 打赏
  • 举报
回复
mark
xxrl 2004-06-09
  • 打赏
  • 举报
回复
myfun函数的处理down的问题很可能是客户端的问题,不过什么个投票系统需要那样处理啊
dsclub 2004-06-09
  • 打赏
  • 举报
回复
UP~~~
BlueDestiny 2004-06-09
  • 打赏
  • 举报
回复
好问题,mark先。
king2003 2004-06-09
  • 打赏
  • 举报
回复
帮你顶了五个就不行是有点勉强
xxrl 2004-06-09
  • 打赏
  • 举报
回复
的确很奇怪的问题,这个问题我没有遇见过
dbase 2004-06-09
  • 打赏
  • 举报
回复
gz
madman2004 2004-06-08
  • 打赏
  • 举报
回复
问题很好
我想换一个数据库如SQLSERVER就好了, 这样可以通过数据库进行并发控制。
fisherjia 2004-06-08
  • 打赏
  • 举报
回复
up
dsclub 2004-06-08
  • 打赏
  • 举报
回复
还是贴全一些,一上代码中的sta.htm就是一个XMLHTTP的脚本没什么可写的!!

对于提交的数据的页面主要用到的就是一个函数!!!
每个<TR>标签里我都有设置一个Value属性的,用这个来保存本条选票的结果,一个页面上有很多选票的!!!Value属性的设置被置在了<TD>的一个相关HTC里!

<script language="javascript">
<!--
function myfun()
{
var obj = document.getElementsByTagName("tr");
//<%=iCount%>

event.srcElement.style.display = "none";


for(var i = 0; i < obj.length; i++)
if(obj[i].cls=="re")
{
// 找到了所有的投票结果
if(obj[i].Value == "-")
{
alert("还有未完成的对象!请全部填写!");

event.srcElement.style.display = "";
arrayE = new Array();
return false;
}
arrayE[arrayE.length] = obj[i].id.toString().replace(/^(tr)/ig,"") + "|" + obj[i].Value;
}

if(arrayE.length == <%=iCount%>)
{
window.location = "./updatedb.asp?re=" + arrayE;
}

}
//-->
</script>


急死我了!!

问题是这个系统成功了几次!!!

但是怎么就有时候就Down了呢???
而且我的理解如果真的是服务器死机了,要么重新IIS服务,要么重启Server,但是我不用管它,一会儿又能正常工作了!!!!

郁闷……………………

真的要被领导骂死了!!!!!

5555555555555~~~~~~~~

dsclub 2004-06-08
  • 打赏
  • 举报
回复
xxrl你来了太好了!!!

对于你说的第一中情况我是有做的!!!!
且看代码:
<%@ Language=VBScript %>
<%
Response.Expires = -1

On Error Resume Next

Dim newArray, I
Dim Conn, RS
Dim strIP

Const adUseClient = 3
Const adClipString = 2

newArray = Split(Request("re"),",")
strIP = Request.ServerVariables("REMOTE_ADDR")
iCount = Request("ct")


Set Conn = CreateObject("ADODB.Connection")

With Conn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & server.MapPath("./data/dsclub.mdb")
.CursorLocation = adUseClient
.Open

End With


' -- 事务处理 -- Start
Conn.BeginTrans

For I = 0 To UBound(newArray)
Conn.Execute("INSERT INTO [result] ([ID_],[SZ_],[IP_]) VALUES (" & Split(newArray(I), "|")(0) & ", '" & Split(newArray(I), "|")(1) & "','" & strIP & "')")
Response.Write Split(newArray(I), "|")(0) & "+++++" & Split(newArray(I), "|")(1)
'Response.Flush
Next

Response.Write "<br>" & err.number & err.Description

If Err.number <> 0 Then
' -- 事务回滚 --
Conn.RollbackTrans
Conn.Close
Set Conn = Nothing
Response.Write "<script language=javascript>alert('由于某种原因您刚才的提交出现了错误,请重新提交');window.history.go(-1);</script>"
Else
' -- 事务提交 --

Conn.CommitTrans

Conn.Close
Set Conn = Nothing
Response.Redirect "./sta.htm"
End If
%>

这是向数据库插入提交数据的代码,也就是说如果发生一些数据库被锁住其他客户暂时无法获得写入权的时候我是提示出错,然后跳回到原有的数据提交页面让用户重新提交,这是没问题的吧!!!但是服务一旦停止了竟然得到的是一个页面无法访问的错误!!!!


如果大家需要我把所有代码都贴上也没关系的!!!就是多了一些!
easyelic 2004-06-08
  • 打赏
  • 举报
回复
大家不要光谈ACCESS怎么不好啊。楼主说的第五个问题我很敢兴趣。可是一点都不懂,谁来解答一下啊
银狐被占用 2004-06-08
  • 打赏
  • 举报
回复
学习楼主。
xxrl 2004-06-08
  • 打赏
  • 举报
回复
就楼主的研究来说 看来楼主用心良苦,但一切是客户之上,同时也要兼顾部署能力
xxrl 2004-06-08
  • 打赏
  • 举报
回复
2、数据提交:
其实数据量并不大,用JScript操作,对投票的结果用Array保存,toString后Post到一个Asp页面,写入数据库!考虑到并发性的控制,我用Con的事物处理来做的!
可是即便如此,当有3-4人同时提交数据库后客户端就处于暂时的假死机状态!而后,返回的是HTTP超时,或者是脚本超时!
---设置一个假的div等待层岂不是能混一下?别人就会等喽
--用事务处理是正确的


回复人: luluso(luluso) ( ) 信誉:99 2004-06-07 09:56:08Z 得分: 0



一同提交就先加锁 加完数后 再解锁


-------------------------

如何操作呢,请指点!


----这个应该指的是application的lock和unlock。。。。。

1、用Access Jet Engine进行连接的mdb文件,它的并发处理能力到底如何?
//具体的没有参考过资料,但作为Sql Server的前期铺垫产品,其并发处理能力还是具有一定的水平的,可以肯定的是十几个人没有问题的。
2、我不愿相信,如果只有10几个用户一同提交数据数据库就挂了!所以我又猜想是我的IIS设置上有问题,但是问题究竟在哪里我可就真的不晓得了。
//hoho
3、发生错误只有在提交时才发生,但是我的的确确用ADO的事物处理来做了!但是如果是脚本超时,那么根据Err的情况来进行事物的提交看来是不可靠的了,但是,这样的确保证一个客户提交到数据库的数据是完整的,不会INSERT了100条,确只有几十条被存到数据库。所以事物处理还是必要的。
//同意
4、XMLHTTP到底是不是一个值得应用的技术。
因为20个客户端每个都是0.8秒从服务器的数据库里SELECT出符合条件的数据再走HTTP返回来,这样服务器的压力岂不是很大,就因为这样可以无刷新,但是代价太不划算了。
//见过并发聊天室的代码,但其实也是和你的一样,处理能力弱,故不得而知。
5、关于HTC的问题。
如果用Asp动态生成的页面里,比如在需要style的<TD>标签里写style,再写Jscript的处理是可以的,但是那样感觉上代码很笨重!所以我用HTC进行了封装。但是,一个比较有意思的事情发生了,在客户浏览器上,显示页面时,鼠标不断的闪动[确切的说是鼠标在正常和后台两个形状之间频繁交替]。这样虽然是代码的可维护性高了,但是显示的速度慢了。对次,我不清楚造成这一现象的原因,难道是因为对于HTC是外连接的文件所以没用到这样一个class时,都要连接一次?如果这样的话,那只是影响显示速度而不影响传输速度是吧。而且,毕竟这样的两个文件比一个个的写style的一个页面文件要小!
//由于客户机器上网时候受到的伤害是慕名的,所以尽量介绍封装数量,求得维护正常即可,越简单的代码到客户的机器上显示的时候出现错误的概率就越低
xxrl 2004-06-08
  • 打赏
  • 举报
回复
支持楼主来了
flying310 2004-06-08
  • 打赏
  • 举报
回复
这种经验很好。
加载更多回复(21)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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