创建你的第一个ZeroASP程序。
1.7.0版本核心基础通用类等。
1.7.0版本核心基础通用类等。
1.7.0版本具备多种数据库的数据解决方案。
1.7.0版本包括GET,POST,数据流等等客户端数据。
1.7.0版本支持原生表单,AJAX和Flash组件上传。
1.7.0版本具备多种时间处理方法。
1.7.0版本支持多种加密解密解决方案。
1.7.0版本不仅适用于上传支持,还适用于远程请求支持。
1.7.0版本API请求核心功能。
1.7.0版本读写JSON数据,减少手动拼接带来的错误。
1.7.0版本读取XML数据和生成XML数据等方法。
1.7.0版本文件夹和文件操作的增删查改方法。
1.7.0版本方便开发者整合自己的功能方法。
1.7.0版本更令人满意的处理关联数据的解决方法。
1.7.0版本采用CDO组件发送,支持SSL协议。
1.7.0版本符合经典ASP3.0编程为基础的MVC。
1.7.0版本生成二维码,保存二维码,二维码图片转换。
1.7.0版本生成图片验证码,支持标准格式。
1.7.0版本采用Excel组件导入导出,支持标准格式。
1.7.0版本生成条形码,支持标准格式。
1.7.0版本支持阿里短信发送,支付宝支付核心等。
1.7.0版本支持微信消息,微信支付核心等。
服务端承载性能一直都是备受关注的,那么作为ZeroASP的开发者,将如何编写高性能承载的代码呢?下面我们将为你提供ZeroASP高性能承载处理的核心代码。你可以免费将该模块使用于任何个人项目。但是不能去除模块信息。官方QQ群:199951855
1.无容错处理;
<!--#include file="./ZeroASP/ZeroASP.asp"--> <% Dim Id,Text,CreatedAt,Line Id = Zasp.Time.Date(Now(),6) & Zasp.Base.RndN(1000,9999) '201610191212120000 Text = "高并发测试" CreatedAt = Zasp.Time.Date(Now(),14) '2016-10-19 12:12:12 '记录创建 Line = Zasp.DB.ExeRows(Conn,"Insert Into [Test] (Id,Text,CreatedAt)Values(" & Id & ",'" & Text & "','" & CreatedAt & "')") Line = 0 '释放返回行数 %>
经过测试:1000个请求仅仅处理了600个请求左右,命中率为65%;
尝试通过增加随机数,由Zasp.Base.RndN(1000,9999)改为Zasp.Base.RndN(100000,999999),依然无法达到100%命中率,为什么会出现这个情况呢?因为当高并发请求的时候,由于受到I/O读写速度影响,难免会出现写入过慢,导致未处理完当前请求又接收下一个请求的情况,所以不难看出问题不在于随机数,而在于I/O读写速度。那么应该怎么纠正这个错误呢?怎么去处理这个无法预知的错误的存在呢?下面将是ZeroASP高性能承载处理的核心代码。
2.有容错处理;
<!--#include file="./ZeroASP/ZeroASP.asp"--> <% Dim Id,Text,CreatedAt,Line,I Id = Zasp.Time.Date(Now(),6) & Zasp.Base.RndN(1000,9999) '201610191212120000 Text = "高并发测试" CreatedAt = Zasp.Time.Date(Now(),14) '2016-10-19 12:12:12 '记录创建 Line = Zasp.DB.ExeRows(Conn,"Insert Into [Test] (Id,Text,CreatedAt)Values(" & Id & ",'" & Text & "','" & CreatedAt & "')") If Line = 0 Or Line = "" Then '表示未成功处理,进行异常判断 If Err.Number <> 0 Then '有异常 Err.Clear '每次异常处理前清空已知错误 For I = 1 To 5 '提供五次异常处理 Id = Zasp.Time.Date(Now(),6) & Zasp.Base.RndN(1000,9999) '201610191212120000 Line = Zasp.DB.ExeRows(Conn,"Insert Into [Test] (Id,Text,CreatedAt)Values(" & Id & ",'" & Text & "','" & CreatedAt & "')") If Err.Number <> 0 Then '有异常 Err.Clear '每次异常处理前清空已知错误 Else Exit For End If Next End If End If If Line = "" Then:Line = 0 '表示异常处理失败,返回0 Line = 0 '释放返回行数 %>
经过测试:1000个请求全部处理完成,命中率为100%;
那么为什么会完成全部的请求呢?原因是因为在创建记录的时候,由于高并发请求,会导致第一次创建记录出现无法创建的情况,那么这个时候已经出现异常错误了,如果不处理,理论上不会导致严重问题,但是对于一些稳定性高的系统中,这部分异常错误是需要我们去尝试修复的,所以我们通过捕抓错误来判断当前记录问题,然后重新尝试创建记录,用于修复错误。那么这里的五次尝试是固定的吗?并不是,这个可以根据你的项目实际情况进行调整,默认情况下我们推荐五次尝试即可。ZeroASP高性能承载处理的核心代码就此介绍完毕,更多性能问题欢迎加入官方QQ群:199951855,我们一同讨论。
1.采用Application锁事件+BeginTrans数据事务+I/O读写容错;
<!--#include file="./ZeroASP/ZeroASP.asp"--> <% '==================================== '↓↓↓高并发处理机制↓↓↓ '==================================== If Application("Queue") <> "" Then Application("Queue") = "" Zasp.Echo("异常,请尝试重新请求") Zasp.Die() End If Application.Lock '队列锁 Application("Queue") = Zasp.Base.GUID() '队列值 '==================================== '↑↑↑高并发处理机制↑↑↑ '==================================== '==================================== '↓↓↓高并发处理机制↓↓↓ '==================================== Call Zasp.DB.Trans(Conn) : On Error Resume Next '==================================== '↑↑↑高并发处理机制↑↑↑ '==================================== '==================================== '↓↓↓高并发处理机制↓↓↓ '==================================== '使用超级执行方法进行I/O读写容错 Call Zasp.DB.SuperExe(Conn,"Update [Test1] Set [Types]=1") Call Zasp.DB.SuperExe(Conn,"Update [Test2] Set [Types]=2") Call Zasp.DB.SuperExe(Conn,"Update [Test3] Set [Types]=3") '==================================== '↑↑↑高并发处理机制↑↑↑ '==================================== '==================================== '↓↓↓高并发处理机制↓↓↓ '==================================== Call Zasp.DB.ExeTrans(Conn) '==================================== '↑↑↑高并发处理机制↑↑↑ '==================================== '==================================== '↓↓↓高并发处理机制↓↓↓ '==================================== Application("Queue") = "" '队列值 Application.Unlock '==================================== '↑↑↑高并发处理机制↑↑↑ '==================================== %>
经过测试:1000个请求全部处理完成,命中率为100%;
测试硬件:Xeon(R) 2.5 GHz + 4G + SSD;
要点:Application使用服务器动态内存,BeginTrans使用数据库物理逻辑,I/O读写容错使用硬盘读写性能;
推荐使用在一些需要高可用性重复校验的接口使用该方法;