作者laechan (小太保)
看板mud_sanc
标题[分享] ASP 与 XML--part5
时间Wed May 23 15:18:38 2012
最近改良了在公司写的程式,这次应用了以前改圣殿时提到的
内回概念,简单的说,每一笔 XML request 格式如下..
<xxxxx>
<xxxxxx>
<request bla bla....>
.
.
</request>
</xxxxxx>
<xxxxx>
我以前的程式写法,是把上面的东西丢给 soap-api 让它去跑
结果,然後我等着接收从它那边传回来的 response,如下..
' 假设要跑 10000 笔 request
for i = 1 to 10000
对 soap-api 送出 request xml (如上)
等待 response
解析 response 并将资料存档
next
这个就类似底下的东西...
for i = 1 to
10
me->shut("xxx",10000,1000,"dam",tar);
现在就是把它改成内回的型式,如下...
me->shut("xxx",10000,1000,"dam",tar,
10);
以 xml 来说,就是把要 request 的资料都统一包起来,如下
str = "<xxxxx><xxxxxx>"
for i = 1 to 10000
str = str & "<request ......> ...... </request>"
next
str = str & "</xxxxxx></xxxxx>"
这对我们就可以只对 soap-api 送出「一个」xml 就搞定,类
似上面只呼叫 shut 一次的语法,soap-api 再针对我送出的
request xml 去解析里面共有几笔 xml,等它解析完就会将资
料回给我,回给我时也是一笔 xml(里面包含多笔 response)
实务上,改良後的语法如下..
str1 = "<xxxxx><xxxxxx>"
str2 = "</xxxxxx></xxxxx>"
for i = 1 to 10000 step 100
str = str1
for ii = i to i+99
str = str & "<request ......> ...... </request>"
next
str = str & str2
将 str 送去 soap-api
等待 soap-api 将 response 传回来
解析 response 的资料并存档
next
上面的意思就是说,我将 10000 笔 request 分 100 次做,
每次做 100 笔 request,则 soap-api 会一次将一百笔资料
回传给我,而等我做完这 100 笔资料後,才会再送下一个一
百笔资料。它的好处是..
一、因为一次解析一百笔资料需要时间(很短),刚好可以给
soap-api 休息的时间。
二、不用去操 soap-api 10000 次,只需要操 100 次即可得
到结果。
三、以前会有 session 过期的问题,但是因为得到了休息时
间,相对的就能延长 session 的使用期限,就不用在每
次做 n 笔後就得重新取得一个 session id。
所以在圣殿的经验还是挺有用的,以前我 10000 笔资料必须
分 10 次手动去 request,我目前正在试 10000 笔的自动执
行 request,若能成功,对将来挺有帮助的。
它的关键就在於每次的 step 最好就让它把该做的事情做完,
包括解析、存档等,这样才能最大限度地延长每一次 request
的时间,来减缓 soap-api 的操劳程度。
它好像有个专有名词,例如说...
for i = 1 to 10000
呼叫某东西做某动作;
假设上述行为会当掉,一般为了防止当掉就会这样做..
for i = 1 to 10000
{
呼叫某东西做某动作;
故意又呼叫了什麽使程式在这里 delay 了一下下;
}
将程式改成上面後就不会当了。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:→ laechan :刚刚跑出测试结果了,10000笔资料不到5000秒就读取完 05/23 15:49
2F:→ laechan :毕,以前至少要两三个小时 05/23 15:49