aardio 文档

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

asynHttpServerObject 成员列表

asynHttpServerObject._beforeHttpServerStop

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

asynHttpServerObject._onClientClosed

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

asynHttpServerObject.acceptCount

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

asynHttpServerObject.beforeStop

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

asynHttpServerObject.bind(IP,端口)

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

asynHttpServerObject.clearKeepAliveTimeout()

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

asynHttpServerObject.client()

返回对象:tcpaclientObject

asynHttpServerObject.client(hSocket)

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

asynHttpServerObject.clientBufferSize

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

asynHttpServerObject.customErrors

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

asynHttpServerObject.defalutDocument

默认文档,默认为"main.aardio",

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

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

asynHttpServerObject.defaultUrl

访问此服务器的默认网址

asynHttpServerObject.documentBase

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

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

asynHttpServerObject.documentRoot

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

asynHttpServerObject.getLocalIp()

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

asynHttpServerObject.getRemoteIp(hSocket)

返回客户端IP地址,端口

asynHttpServerObject.getUrl

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

asynHttpServerObject.getUrl()

返回首页网址

asynHttpServerObject.getUrl(path,localIp)

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

asynHttpServerObject.getUrl(path,param,localIp)

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

asynHttpServerObject.isClosed(hSocket)

连接是否已关闭

asynHttpServerObject.isConnected(hSocket)

是否已连接并准备就绪

asynHttpServerObject.keepAliveTimeout

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

asynHttpServerObject.listen(请求队列大小)

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

asynHttpServerObject.maxConnection

最大连接数

asynHttpServerObject.onClientClosed

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

asynHttpServerObject.onClose

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

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

asynHttpServerObject.onOpen

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

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

asynHttpServerObject.onOutOfBandData

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

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

asynHttpServerObject.onRead

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

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

asynHttpServerObject.onReceive

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

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

asynHttpServerObject.onSend

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

    /*发送数据*/
}

asynHttpServerObject.onStop

asynHttpServerObject.onStop = function(err){


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

asynHttpServerObject.onUpgradeProtocol

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

asynHttpServerObject.run(httpProc)

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

asynHttpServerObject.serverAddress

服务端监听地址

返回对象:sockaddrInObject

asynHttpServerObject.shutdown()

断开 HTTP 服务端

asynHttpServerObject.spaUrl

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

asynHttpServerObject.spaUrl(indexHtmlPath,documentBase)

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

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

asynHttpServerObject.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为私有或临时端口

asynHttpServerObject.stop()

关闭 HTTP 服务端

asynHttpServerObject.clients 成员列表

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

asynHttpServerObject.clients.?

返回对象:tcpaclientObject

wsock.tcp 成员列表

wsock.tcp.asynHttpServer

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

wsock.tcp.asynHttpServer()

创建单线程异步 HTTP 服务端

返回对象:asynHttpServerObject

Markdown 格式