一、介绍
每个客户端连接对应一个Connection对象,可以设置对象的onMessage、onClose等回调,同时提供了向客户端发送数据send接口与关闭连接close接口,以及其它一些必要的接口。
可以说Worker是一个监听容器,负责接受客户端连接,并把连接包装成connection对象式提供给开发者操作。
二、属性
名称 | 说明 |
---|---|
int Connection::$id | 连接的id。这是一个自增的整数。 注意:workerman是多进程的,每个进程内部会维护一个自增的connection id,所以多个进程之间的connecion id会有重复。 如果想要不重复的connection id 可以根据需要给connection->id重新赋值,例如加上worker->id前缀。 |
string Connection::$protocol | 设置当前连接的协议类 |
Worker Connection::$worker | 此属性为只读属性,即当前connection对象所属的worker实例 |
int Connection::$maxSendBufferSize | 此属性用来设置当前连接的应用层发送缓冲区大小。不设置默认为Connection::$defaultMaxSendBufferSize(1MB)。Connection::$maxSendBufferSize 和 Connection::$defaultMaxSendBufferSize均可以动态设置。 此属性影响onBufferFull回调 |
static int Connection::$defaultMaxSendBufferSize | 此属性为全局静态属性,用来设置所有连接的默认应用层发送缓冲区大小。不设置默认为1MB。 Connection::$defaultMaxSendBufferSize可以动态设置,设置后只对之后产生的新连接有效 |
static int Connection::$maxPackageSize | 此属性为全局静态属性,用来设置每个连接能够接收的最大包包长。不设置默认为10MB。 |
三、回调属性
名称 | 说明 |
---|---|
callback Connection::$onMessage | 作用与Worker::$onMessage回调相同,区别是只针对当前连接有效,也就是可以针对某个连接的设置onMessage回调。 |
callback Connection::$onClose | 此回调与Worker::$onClose回调作用相同,区别是只针对当前连接有效,也就是可以针对某个连接的设置onClose回调 |
callback Connection::$onBufferFull | 作用与Worker::$onBufferFull回调相同,区别是只针对当前连接起作用,即可以单独设置某个连接的onBufferFull回调 |
callback Connection::$onBufferDrain | 作用与Worker::$onBufferDrain回调相同,区别是只针对当前连接起作用,即可以单独设置某个连接的onBufferDrain回调 |
callback Connection::$onError | 作用与Worker::$onError回调相同,区别是只针对当前连接起作用,即可以单独设置某个连接的onError回调 |
四、接口
名称 | 参数 | 返回值 | 说明 |
---|---|---|---|
mixed Connection::send(mixed $data [,$raw = false]) | $data 要发的数据 $row 是否发原始数据 | true 表示发送成功 null 表示放入待发送队列,等待异步发送 false 表示发送失败,失败原因可能是客户端连接已经关闭,或者该连接的应用层发送缓冲区已满 | 向客户端发送数据 |
string Connection::getRemoteIp() | String | 获得该连接的客户端ip | |
int Connection::getRemotePort() | 获得该连接的客户端端口 | ||
void Connection::close(mixed $data = ”) | $data 可选参数,要发送的数据(如果有指定协议,则会自动调用协议的encode方法打包$data数据),当数据发送完毕后关闭连接,随后会触发onClose回调 | 调用close会等待发送缓冲区的数据发送完毕后才关闭连接,并触发连接的onClose回调 | |
void Connection::destroy() | 与close不同之处是,调用destroy后即使该连接的发送缓冲区还有数据未发送到对端,连接也会立刻被关闭,并立刻触发该连接的onClose回调。 | ||
void Connection::pauseRecv(void) | 使当前连接停止接收数据。该连接的onMessage回调将不会被触发。此方法对于上传流量控制非常有用 | ||
void Connection::resumeRecv(void) | 使当前连接继续接收数据。此方法与Connection::pauseRecv配合使用,对于上传流量控制非常有用 | ||
void Connection::pipe(TcpConnection $target_connection) | 将当前连接的数据流导入到目标连接。内置了流量控制。此方法做TCP代理非常有用 |