br> scalability 总是与我的最后一个话题 performance 缠绕在一起,但事实上,它们是完全不同的两个问题。在performance 一节里,我已谈及了 caching, 它是scalability 最大的改进之一,因此,我(作者)在想,我还得找些其它一些内容在这节里讨论。
首先,此系统建成,本身有着一定的特性,以改进多处理器和串环境中的性能。例如,session state 能够通过单独的处理器来维持,在一个单独的机器上,甚至在数据库中允许交叉的服务器sessions。通过这样,即使在开发过程中你没有想过会快速增加的流量,也可以相对容易的增加更多的网络服务器。
这儿同样有一些被称作“web花园”的东西,我也不太完全了解。但是,它们可以帮助多处理器的机器,帮助它们做比单处理器更多的工作。我认为它是个非常新奇的想法,但是,也有人认为他们不会使用这项功能。
因此,你已经拥有了建立一个完善的web农场的工具,但是如何使它们不停的运作呢?当然,asp。net runtime会监控并管理进程。当有漏洞或者是死锁时,runtime会自动关闭,但是只需等待,它会恢复。在老版本关闭之前,一个新的版本会在老版本的位置启动以覆盖老版本。runtime然后会引导新的指令至新的工作进程并排斥老指令然后关闭。因为有了替换,最后用户是不会发现任何改动的。
在介绍这么多asp.net 的高性能后,下面我将介绍几个例子。
先举一个c#的例子
验证用户表单输入
运行环境:win2000 advance server+iis5.0+ngws sdk(80m的).
$#@60;%@ page language=”c#” %$#@62;
$#@60;html$#@62;
$#@60;script language=”javascript”$#@62;
function clientvalidateemail(source, value)
{
var strr;
re=/(\w+@\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
re.exec(value);
if (regexp.$3!=””&®exp.$3!=”.”&®exp.$2!=”.”) strr=regexp.$1+regexp.$2+regexp.$3
else
if (regexp.$2!=””&®exp.$2!=”.”) strr=regexp.$1+regexp.$2
else strr=regexp.$1
if (strr!=value)
return false;
else
return true;
}
$#@60;/script$#@62;
$#@60;body$#@62;
$#@60;h3$#@62;asp.net验证用户输入$#@60;/h3$#@62;
$#@60;form method=post runat= ver$#@62;
$#@60;hr width=600 size=1 noshade$#@62;
$#@60;table$#@62;
$#@60;tr$#@62;
$#@60;td$#@62;
$#@60;asp:validationsummary id=”valsum” runat=”server”
headertext=”你必须输入下面这些表单域:”
displaymode=”bulletlist”
font-name=”宋体”
font-size=”12″
/$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;/table$#@62;
$#@60;center$#@62;
$#@60;p$#@62;
$#@60;!– 登陆信息 –$#@62;
$#@60;table border=0 width=600 $#@62;
$#@60;tr$#@62;$#@60;td colspan=3$#@62;
$#@60;table border=0 cellpadding=0 cellspacing=0 width=”100%”$#@62;
$#@60;tr$#@62;$#@60;td$#@62;
$#@60;b$#@62;登陆信息$#@60;/b$#@62;
$#@60;/td$#@62;$#@60;/tr$#@62;
$#@60;/table$#@62;
$#@60;/td$#@62;$#@60;/tr$#@62;
$#@60;tr$#@62;
$#@60;td align=right$#@62;
email地址:
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:textbox id=email width=200px maxlength=60 runat=server /$#@62;
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:requiredfieldvalidator id=”emailreqval”
controltovalidate=”email”
errormessage=”email地址”
display=”dynamic”
font-name=”宋体”
font-size=”12″
runat=server$#@62;
*
$#@60;/asp:requiredfieldvalidator$#@62;
$#@60;asp:customvalidator id=”emailregexval” runat=”server”
controltovalidate=”email”
clientvalidationfunction=”clientvalidateemail”
display=”static”
font-name=”宋体”
font-size=”12″$#@62;
非法email地址
$#@60;/asp:customvalidator$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;tr$#@62;
$#@60;td align=right$#@62;
密码:
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:textbox id=passwd textmode=”password” maxlength=20 runat=server/$#@62;
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:requiredfieldvalidator id=”passwdreqval”
controltovalidate=”passwd”
errormessage=”用户密码”
display=”dynamic”
font-name=”宋体” font-size=”12″
runat=server$#@62;
*
$#@60;/asp:requiredfieldvalidator$#@62;
$#@60;asp:regularexpressionvalidator id=”passwdregexbal”
controltovalidate=”passwd”
validationexpression=”.*[!@#$%^&*+;:].*”
display=”static”
font-name=”宋体” font-size=”12″
width=”100%” runat=server$#@62;
密码必须包含如下字符: (!@#$%^&*+;:)
$#@60;/asp:regularexpressionvalidator$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;tr$#@62;