Swoole TCP服务器面向对象写法
<?php
Class server
{
public $server;
/**
* @param string $host 监听地址
* @param int $port 监听端口
* @param array $set tcp服务器参数
*/
public function __construct($host = '127.0.0.1', $port = 9501 , $set = []){
$this->server = new Swoole\Server($host,$port);
if(!empty($set)){
$this->server->set($set);
}
//监听连接进入事件
/*server->on 注册Server的事件回调函数。bool Server->on(string $event, mixed $callback);
* 第1个参数是回调的名称, 大小写不敏感
* 第2个函数是回调的PHP函数
*
* $fd 客户端连接的唯一标识
* $reactor_id 线程id
*/
$this->server->on('Connect',[$this,'onConnect']);
//接受时间回调监听
$this->server->on('Receive',[$this,'onReceive']);
//关闭
$this->server->on('Close',[$this,'onClose']);
//启动服务器
/*
* Server->start 启动服务器,监听所有TCP/UDP端口,函数原型:bool Server->start()
*/
$this->server->start();
}
static function onConnect($serv, $fd,$reactor_id){
echo "Client:{$reactor_id}-{$fd}-Connect.\n";
}
static function onReceive($serv, $fd, $from_id, $data){
/*向客户端发送数据,函数原型:bool Server->send(mixed $fd, string $data, int $serverSocket = -1);
* (1)$fd,客户端的文件描述符
* (2)$data,发送的数据,TCP协议最大不得超过2M,可修改 buffer_output_size 改变允许发送的最大包长度
* (3)$serverSocket,向Unix Socket DGRAM对端发送数据时需要此项参数,TCP客户端不需要填写
*/
$serv->send($fd, "接受数据Server: {$from_id}-{$fd}:".$data);
}
static function onClose($serv, $fd){
#逻辑
}
}