# wsock.tcp.asyncServer 库模块帮助文档

[HTTP 服务端开发指南](https://www.aardio.com/zh-cn/doc/guide/quickstart/web-server.md)

## tcpasyncServerObject 成员列表 <a id="tcpasyncServerObject" href="#tcpasyncServerObject">&#x23;</a>

### tcpasyncServerObject._beforeStop <a id="tcpasyncServerObject._beforeStop" href="#tcpasyncServerObject._beforeStop">&#x23;</a>

```aardio
tcpasyncServerObject._beforeStop = function(){
	/*服务端关闭以前触发  
此回调函数是标准库保留接口  
用户不应使用此回调*/
}
```

### tcpasyncServerObject._onClientClosed <a id="tcpasyncServerObject._onClientClosed" href="#tcpasyncServerObject._onClientClosed">&#x23;</a>

```aardio
tcpasyncServerObject._onClientClosed = function(hSocket){
	/*客户端连接已经关闭时触发  
此函数在连接断开后一定会被触发  
此回调函数是标准库保留接口  
用户不应使用此回调*/
}
```

### tcpasyncServerObject.acceptCount <a id="tcpasyncServerObject.acceptCount" href="#tcpasyncServerObject.acceptCount">&#x23;</a>
当前连接数,不可改动该值

### tcpasyncServerObject.beforeStop <a id="tcpasyncServerObject.beforeStop" href="#tcpasyncServerObject.beforeStop">&#x23;</a>

```aardio
tcpasyncServerObject.beforeStop = function(){
	/*服务端关闭以前触发*/
}
```

### tcpasyncServerObject.bind(IP,端口) <a id="tcpasyncServerObject.bind" href="#tcpasyncServerObject.bind">&#x23;</a>
绑定 IP 与端口。  
应当由 start 函数自动调用此函数。

### tcpasyncServerObject.clearKeepAliveTimeout() <a id="tcpasyncServerObject.clearKeepAliveTimeout" href="#tcpasyncServerObject.clearKeepAliveTimeout">&#x23;</a>
关闭所有超出keepAliveTimeout限制的超时连接  
在连接超出最大连接数时,此函数会被自动调用

### tcpasyncServerObject.client() <a id="tcpasyncServerObject.client" href="#tcpasyncServerObject.client">&#x23;</a>
[返回对象:tcpaclientObject](https://www.aardio.com/zh-cn/doc/library-reference/wsock/tcp/asyncClient.html#tcpaclientObject)

### tcpasyncServerObject.client(hSocket) <a id="tcpasyncServerObject.client" href="#tcpasyncServerObject.client">&#x23;</a>
用于获取客户端套接字对应的客户端对象

### tcpasyncServerObject.clientBufferSize <a id="tcpasyncServerObject.clientBufferSize" href="#tcpasyncServerObject.clientBufferSize">&#x23;</a>
客户端套接字读写缓冲区大小，默认为1MB  
缓冲区如果设置的太小，会导致过于频繁的调用读写函数

### tcpasyncServerObject.getLocalIp() <a id="tcpasyncServerObject.getLocalIp" href="#tcpasyncServerObject.getLocalIp">&#x23;</a>
返回当前绑定的本地 IP,端口号

### tcpasyncServerObject.getLocalPort() <a id="tcpasyncServerObject.getLocalPort" href="#tcpasyncServerObject.getLocalPort">&#x23;</a>
返回当前绑定的本地端口号

### tcpasyncServerObject.getRemoteIp(hSocket) <a id="tcpasyncServerObject.getRemoteIp" href="#tcpasyncServerObject.getRemoteIp">&#x23;</a>
返回客户端IP地址,端口

### tcpasyncServerObject.isClosed(hSocket) <a id="tcpasyncServerObject.isClosed" href="#tcpasyncServerObject.isClosed">&#x23;</a>
连接是否已关闭

### tcpasyncServerObject.isConnected(hSocket) <a id="tcpasyncServerObject.isConnected" href="#tcpasyncServerObject.isConnected">&#x23;</a>
是否已连接并准备就绪

### tcpasyncServerObject.keepAliveTimeout <a id="tcpasyncServerObject.keepAliveTimeout" href="#tcpasyncServerObject.keepAliveTimeout">&#x23;</a>
最大保持连接时间,以秒为单位,  
负数表示不限时间

### tcpasyncServerObject.listen(请求队列大小) <a id="tcpasyncServerObject.listen" href="#tcpasyncServerObject.listen">&#x23;</a>
监听构造函数绑定的 IP 端口，成功返回 true 。  
已自动调用此函数。

### tcpasyncServerObject.maxConnection <a id="tcpasyncServerObject.maxConnection" href="#tcpasyncServerObject.maxConnection">&#x23;</a>
最大连接数

### tcpasyncServerObject.serverAddress <a id="tcpasyncServerObject.serverAddress" href="#tcpasyncServerObject.serverAddress">&#x23;</a>
服务端监听地址  

[返回对象:sockaddrInObject](#sockaddrInObject)

### tcpasyncServerObject.shutdown() <a id="tcpasyncServerObject.shutdown" href="#tcpasyncServerObject.shutdown">&#x23;</a>
断开 TCP 服务端

### tcpasyncServerObject.start(IP,端口,请求队列大小) <a id="tcpasyncServerObject.start" href="#tcpasyncServerObject.start">&#x23;</a>
启动单线程异步TCP服务端,成功返回true,失败返回null,  

如果不写IP，则默认设为"0.0.0.0"也即监听本机所有IP,访问此服务端也不限制IP  
限制仅本机可以访问建议写127.0.0.1  

端口为0或省略则自动查找1025以后的空闲端口  
注意0-1023为系统通用服务保留端口,  
1024-49151为用户服务端口,其中大约%9已由IANA注册分配  
49152-65535为私有或临时端口

### tcpasyncServerObject.stop() <a id="tcpasyncServerObject.stop" href="#tcpasyncServerObject.stop">&#x23;</a>
关闭 TCP 服务端

## tcpasyncServerObject 事件列表 <a id="tcpasyncServerObjectEvent" href="#tcpasyncServerObjectEvent">&#x23;</a>

### tcpasyncServerObject.onClientClosed <a id="tcpasyncServerObject.onClientClosed" href="#tcpasyncServerObject.onClientClosed">&#x23;</a>

```aardio
tcpasyncServerObject.onClientClosed = function(hSocket){
	/*客户端连接已经关闭时触发  
此函数在连接断开后一定会被触发*/
}
```

### tcpasyncServerObject.onClose <a id="tcpasyncServerObject.onClose" href="#tcpasyncServerObject.onClose">&#x23;</a>

```aardio
tcpasyncServerObject.onClose = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*已断开连接,  
如果缓冲区中仍然有数据,  
这个事件可能在其他事件前面触发  
主动调用close函数立即关闭连接,此事件不会被触发,  
但onClientClosed事件总会在关闭连接后触发*/	
}
```

### tcpasyncServerObject.onOpen <a id="tcpasyncServerObject.onOpen" href="#tcpasyncServerObject.onOpen">&#x23;</a>

```aardio
tcpasyncServerObject.onOpen = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*已连接  
在这里可以开始发送数据*/	
}
```

### tcpasyncServerObject.onOutOfBandData <a id="tcpasyncServerObject.onOutOfBandData" href="#tcpasyncServerObject.onOutOfBandData">&#x23;</a>

```aardio
tcpasyncServerObject.onOutOfBandData = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*收到紧急数据  
即send函数最后一个flag参数设为_MSG_OOB时发送的1字节带外数据*/		
}
```

### tcpasyncServerObject.onRead <a id="tcpasyncServerObject.onRead" href="#tcpasyncServerObject.onRead">&#x23;</a>

```aardio
tcpasyncServerObject.onRead = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*收到数据  
可阻塞读取数据  
定义了此事件就不应同时定义onReceive事件*/	
}
```

### tcpasyncServerObject.onReceive <a id="tcpasyncServerObject.onReceive" href="#tcpasyncServerObject.onReceive">&#x23;</a>

```aardio
tcpasyncServerObject.onReceive = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*收到数据  
仅读取已到达的数据  
定义了此事件就不应同时定义onRead事件*/	
}
```

### tcpasyncServerObject.onSend <a id="tcpasyncServerObject.onSend" href="#tcpasyncServerObject.onSend">&#x23;</a>

```aardio
tcpasyncServerObject.onSend = function(hSocket,err){
    var client = tcpasyncServerObject.client(hSocket);

	/*发送数据*/
}
```

### tcpasyncServerObject.onStop <a id="tcpasyncServerObject.onStop" href="#tcpasyncServerObject.onStop">&#x23;</a>

```aardio
tcpasyncServerObject.onStop = function(err){

	/*已停止服务端  
主动调用stop函数停止服务端时不会触发此事件*/	
}
```

## tcpasyncServerObject.clients 成员列表 <a id="tcpasyncServerObject.clients" href="#tcpasyncServerObject.clients">&#x23;</a>

这是一个包含所有客户端套接字的表对象  
其中键为套接字句柄,值为 wsock.tcp.asyncClient对象

### tcpasyncServerObject.clients.* <a id="tcpasyncServerObject.clients.any" href="#tcpasyncServerObject.clients.any">&#x23;</a>
[返回对象:tcpaclientObject](https://www.aardio.com/zh-cn/doc/library-reference/wsock/tcp/asyncClient.html#tcpaclientObject)

## wsock.tcp 成员列表 <a id="wsock.tcp" href="#wsock.tcp">&#x23;</a>

### wsock.tcp.asyncServer() <a id="wsock.tcp.asyncServer" href="#wsock.tcp.asyncServer">&#x23;</a>
创建单线程异步TCP服务端  

[返回对象:tcpasyncServerObject](#tcpasyncServerObject)
