这篇文章将为大家详细讲解有关怎样理解服务端中TCP/UDP服务器的属性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
$setting
Server->set()
函数所设置的参数会保存到Server->setting
属性上. 在回调函数中可以访问运行参数的值.
Swoole\Server->setting
demo:
$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
'worker_num'=>4,
]);
var_export($server->setting);
echo PHP_EOL;
//$server->start(); //这里不需要start就可以执行上面的代码
直接运行:
$master_pid
返回当前服务器主进程的PID
Swoole\Server->master_pid: int
demo:
$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
'worker_num'=>4,
]);
var_export($server->setting);
echo PHP_EOL;
$server->on('start', function(Swoole\Server $server){
//获取当前服务器主进程的 PID
echo 'master_pid:'.$server->master_pid.PHP_EOL;
});
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
//收到客户端信息, 回复内容, 并关闭连接
$server->send($fd, 'Swoole Server received your data:'.trim($data).PHP_EOL);
$server->close($fd);
});
$server->start();
启动服务并使用telnet连接, 然后在客户端发送消息"aaa":
$manager_pid
但会当前服务器管理进程的PID
Swoole\Server->manager_pid: int
只能在onStart
、onWorkerStart
之后获取到
demo:
$server = new Swoole\Server('127.0.0.1', 9501);
$server->on('start', function(Swoole\Server $server){
//获取当前服务器管理进程的 PID
echo 'manager_pid:'.$server->manager_pid.PHP_EOL;
});
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
//收到客户端信息, 回复内容, 并关闭连接
$server->send($fd, 'Swoole Server received your data:'.trim($data).PHP_EOL);
$server->close($fd);
});
$server->start();
和上面一样, 启动服务并使用telnet连接, 然后在客户端发送消息"aaa":
$worker_id
得到当前Worker
进程的编号, 包括Task
进程.
Swoole\Server->worker_id: int
demo:
$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
'worker_num'=>4,
'task_worker_num'=>4,
]);
$server->on('workerStart', function(Swoole\Server $server, $workerId){
if($server->taskworker){
echo 'task workerId:'.$workerId;
echo ', task worker_id:'.$server->worker_id.PHP_EOL;
}else{
echo 'workerId:'.$workerId;
echo ', worker_id:'.$server->worker_id.PHP_EOL;
}
});
//必须设置onReceive事件回调函数
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
});
//必须设置onTask事件回调函数
$server->on('task', function(Swoole\Server $server, $task_id, $reactor_id, $data){
});
$server->start();
启动服务器:
这个Swoole\Server->worker_id
属性与onWorkerStart
的$worker_id
是相同的.
Worker
进程编号范围是[0, $server->setting['worker_num'] - 1]
Task进程编号范围是: [$sever->setting['worker_num'], $server->setting['worker_num'] + $server->setting['task_worker_num']]
.
Worker
进程重启后worker_id
的值是不变的
$worker_pid
得到当前Worker
进程的操作系统进程ID, 与posix_getpid()
的返回值相同.
Swoole\Server->worker_pid: int
$taskworker
当前进程是否是Task进程
Swoole\Server->taskworker: bool
返回值: true
表示当前进程是Task
工作进程, 否则就是Worker
进程
$connections
TCP
连接迭代器, 可以使用foreach
遍历服务器当前所有的连接, 此属性的功能与Server->getClientList
是一致的, 但是更加友好.
遍历的元素为单个连接的fd
.
Swoole\Server->connections
$connections
属性是一个迭代器对象, 不是PHP数组, 所以不能用var_dump
或者数组下标来访问, 只能通过foreach
来循环.
demo:
foreach($server->connections as $fd){
var_dump($fd);
}
echo '当前服务器共有'.count($server->connections).'个连接'.PHP_EOL;
$ports
监听的端口数组. 如果服务器监听了多个端口, 可以遍历Server::$ports
得到所有Swoole\Server\Port
对象.
其中swoole_server::$ports[0]
为构造方法所设置的主服务器端口.
$ports = $server->ports;
$ports[0]->set($settings);
$ports[1]->on('receive', function(){
//onReceive event callback function
});
```
关于怎样理解服务端中TCP/UDP服务器的属性就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。