aardio 文档

wsock.tcp.asyncHttpServer 库模块帮助文档

AsyncHttpServerObject 成员列表 #

AsyncHttpServerObject._beforeHttpServerStop #

AsyncHttpServerObject._beforeHttpServerStop = function(){
    /*服务端关闭以前触发  
此回调函数是标准库保留接口  
用户不应使用此回调*/
}

AsyncHttpServerObject._onClientClosed #

AsyncHttpServerObject._onClientClosed = function(hSocket){
    /*客户端连接已经关闭时触发  
此函数在连接断开后一定会被触发  
此回调函数是标准库保留接口  
用户不应使用此回调*/
}

AsyncHttpServerObject.acceptCount #

当前连接数,不可改动该值

AsyncHttpServerObject.beforeStop #

AsyncHttpServerObject.beforeStop = function(){
    /*服务端关闭以前触发*/
}

AsyncHttpServerObject.bind(IP,端口) #

绑定 IP 与端口。
应当由 start 函数自动调用此函数。

AsyncHttpServerObject.clearKeepAliveTimeout() #

关闭所有超出keepAliveTimeout限制的超时连接
在连接超出最大连接数时,此函数会被自动调用

AsyncHttpServerObject.client() #

返回对象:tcpaclientObject

AsyncHttpServerObject.client(hSocket) #

用于获取客户端套接字对应的客户端对象

AsyncHttpServerObject.clientBufferSize #

客户端套接字读写缓冲区大小,默认为1MB
缓冲区如果设置的太小,会导致过于频繁的调用读写函数

AsyncHttpServerObject.codeFileMode #

设置 response.loadcode 函数处理 *.aardio 代码文件的模式。
值为 null 或者 "execute" 表示允许执行代码,默认为 null。
设为 "static" 则 aardio 文件可作为普通文件下载。
设为 "deny" 则禁止访问 aardio 文件。

AsyncHttpServerObject.customErrors #

AsyncHttpServerObject.customErrors = {  
    [404] = function(response){  
        response.status = "404 Not Found";  
        response.write("404 Not Found"); /*自定义错误页,  
也可以直接指定错误页路径*/  
    }   
}

AsyncHttpServerObject.defalutDocument #

默认文档,默认为"main.aardio",设为 null 禁用默认文档。

如果访问硬盘上存在的目录,request.path 尾部不加斜杠会自动跳转到以斜杠结束的路径

如果访问嵌入资源目录,只有 request.path 以斜杠才会访问默认文档,
对于访问嵌入资源文件,建议指定完整的文件路径,
默认文档主要是用于硬盘上的网站

AsyncHttpServerObject.defaultUrl #

访问此服务器的默认网址

AsyncHttpServerObject.documentBase #

网站根目录,
不会修改应用程序根目录,支持硬盘目录与资源目录,
这个属性应当设置为应用程序根目录下的相对路径,
例如 "/res/web/"

注意: request.path 前面包含 documentBase 目录。
而 request.pathInfo 忽略 documentBase 目录

AsyncHttpServerObject.documentRoot #

网站应用程序根目录,默认为"/",
只能设置为硬盘上实际存在的目录,
改变此目录,会同时改变
服务端代码中的应用程序根目录以及用户库目录,
如果只是相将所有请求路径转向某个目录,应当改用 documentBase 属性
如果网站在嵌入资源目录中,应当改用 documentBase 属性

AsyncHttpServerObject.getLocalIp() #

返回当前绑定的本地 IP,端口号

AsyncHttpServerObject.getLocalPort() #

返回当前绑定的本地端口号

AsyncHttpServerObject.getRemoteIp(hSocket) #

返回客户端IP地址,端口

AsyncHttpServerObject.getUrl #

返回 HTTP 服务端访问网址
如果服务器启动失败不返回任何值

AsyncHttpServerObject.getUrl() #

返回首页网址

AsyncHttpServerObject.getUrl(path,localIp) #

返回 @path 指定路径的网址,路径开始可省略斜杠。
注意参数第一个字符不需要指定斜杠
可选用 @localIp 指定 IP "0.0.0.0" 是否替换为上网卡 IP(否则 localhost )

AsyncHttpServerObject.getUrl(path,param,localIp) #

返回 @path 指定路径的网址,路径开始可省略斜杠。
@param 指定 URL 参数表(table 对象)。
可选用 @localIp 指定 IP "0.0.0.0" 是否替换为上网卡 IP(否则 localhost )

AsyncHttpServerObject.isClosed(hSocket) #

连接是否已关闭

AsyncHttpServerObject.isConnected(hSocket) #

是否已连接并准备就绪

AsyncHttpServerObject.keepAliveTimeout #

最大保持连接时间,以秒为单位,
负数表示不限时间

AsyncHttpServerObject.listen(请求队列大小) #

监听构造函数绑定的 IP 端口,成功返回 true 。
已自动调用此函数。

AsyncHttpServerObject.maxConnection #

最大连接数

AsyncHttpServerObject.run(httpProc) #

AsyncHttpServerObject.run(   
    function(response,request,session){   
         response.loadcode(request.path);  
    }/*启动HTTP服务并在此回调函数中处理请求,  
不传入参数则默认调用response.loadcode 。  
也可以传入一个或多个表参数,键为页面相对路径,值为响应数据或回调函数,  
键指定的路径为 aardio 后缀时,启用模板语法解析并返回 HTML 代码*/  
);

AsyncHttpServerObject.serverAddress #

服务端监听地址

返回对象:sockaddrInObject

AsyncHttpServerObject.shutdown() #

断开 HTTP 服务端

AsyncHttpServerObject.spaUrl #

返回 SPA 单页应用首页网址
如未启动服务端则自动启动且监听IP设为 "127.0.0.1"

AsyncHttpServerObject.spaUrl(indexHtmlPath,documentBase) #

参数指定 SPA 单页应用首页路径,
404错误页也会自动设置到该路径,
返回首页网址

可选用参数 @documentBase 指定根目录以避免网页不支持非根目录路径

AsyncHttpServerObject.start(IP,端口,请求队列大小) #

启动单线程异步TCP服务端,成功返回true,失败返回null,

如果不写IP,则默认设为"0.0.0.0"也即监听本机所有IP,访问此服务端也不限制IP
限制仅本机可以访问建议写127.0.0.1

端口为0或省略则自动查找1025以后的空闲端口
注意0-1023为系统通用服务保留端口,
1024-49151为用户服务端口,其中大约%9已由IANA注册分配
49152-65535为私有或临时端口

AsyncHttpServerObject.stop() #

关闭 HTTP 服务端

AsyncHttpServerObject 事件列表 #

AsyncHttpServerObject.onClientClosed #

AsyncHttpServerObject.onClientClosed = function(hSocket){
    /*客户端连接已经关闭时触发  
此函数在连接断开后一定会被触发*/
}

AsyncHttpServerObject.onClose #

AsyncHttpServerObject.onClose = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*已断开连接,  
如果缓冲区中仍然有数据,  
这个事件可能在其他事件前面触发  
主动调用close函数立即关闭连接,此事件不会被触发,  
但onClientClosed事件总会在关闭连接后触发*/ 
}

AsyncHttpServerObject.onOpen #

AsyncHttpServerObject.onOpen = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*已连接  
在这里可以开始发送数据*/ 
}

AsyncHttpServerObject.onOutOfBandData #

AsyncHttpServerObject.onOutOfBandData = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*收到紧急数据  
即send函数最后一个flag参数设为_MSG_OOB时发送的1字节带外数据*/      
}

AsyncHttpServerObject.onRead #

AsyncHttpServerObject.onRead = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*收到数据  
可阻塞读取数据  
定义了此事件就不应同时定义onReceive事件*/    
}

AsyncHttpServerObject.onReceive #

AsyncHttpServerObject.onReceive = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*收到数据  
仅读取已到达的数据  
定义了此事件就不应同时定义onRead事件*/   
}

AsyncHttpServerObject.onSend #

AsyncHttpServerObject.onSend = function(hSocket,err){
    var client = AsyncHttpServerObject.client(hSocket);

    /*发送数据*/
}

AsyncHttpServerObject.onStop #

AsyncHttpServerObject.onStop = function(err){

    /*已停止服务端  
主动调用stop函数停止服务端时不会触发此事件*/ 
}

AsyncHttpServerObject.onUpgradeProtocol #

AsyncHttpServerObject.onUpgradeProtocol = function(client,request,response){
    /*处理客户端升级协议请求,  
可在此回调中切换到WebSocket协议*/
}

AsyncHttpServerObject.clients 成员列表 #

这是一个包含所有客户端套接字的表对象
其中键为套接字句柄,值为 wsock.tcp.asyncClient对象

AsyncHttpServerObject.clients.* #

返回对象:tcpaclientObject

wsock.tcp 成员列表 #

wsock.tcp.asyncHttpServer #

单线程异步 HTTP 服务端
浏览器组件发起异步 HTTP 请求支持 asyncHttpServer。
请不要用 inet.http 等阻塞请求同一线程创建的 asyncHttpServer,
这会导致 asyncHttpServer 没有机会响应请求而导致死锁,
一般没必要这样自己 HTTP 请求自己,改成普通函数调用即可,
如果确有这样的需求,可以创建线程调用 inet.http 发起请求,
或改用基于多线程的 wsock.tcp.simpleHttpServer 创建服务端

wsock.tcp.asyncHttpServer() #

创建单线程异步 HTTP 服务端

返回对象:AsyncHttpServerObject

Markdown 格式