HttpServer与异步编程
HttpRequest事件中的e参数有两个方法,WriteString和WriteFile,分别用于向客户端发送文件文本和文件,这两个方法本身就是异步执行的,通常不会影响负载能力。
但HttpRequest事件中的代码是在主线程中同步执行的,如果要这里进行一些负荷较重的计算,例如数据的统计查询,复杂网页的生成,将客户上传的文件存储在本地等等,而且用户量比较大,那么就可以考虑异步编程了。
我们并不能简单地将HttpRequest事件中的代码转移到自定义函数中,然后在HttpRequest事件中用异步方式调用此函数就完事,因为默认主线程执行完毕, 系统就会关闭和客户端的信道,客户端不会显示任何内容,同时因为信道已经关闭,异步函数向客户端发送信息的时候会出错。
所以HttpRequest事件采用异步编程,首先要通知系统,我将采用异步编程,主线程完成之后不能关闭信道 ,最后要在异步函数运行结束后通知系统关闭信道。
HttpRequest事件代码结构为:
e.AsyncExecute
= True
'通知系统,将采用异步方式生成网页
Functions.AsyncExecute("函数名",
e)
'异步调用函数生成网页
异步函数代码结构为:
Dim
e As
RequestEventArgs =
args(0)
'生成网页
'...
'发送网页
e.Handled
= True
'通知系统异步函数执行完毕,可以关闭信道
接下来我们会用两个例子演示HttpServer异步编程。