2
回答
swoole服务处理完一个请求后,如何销毁相应该请求时定义的常量
华为云实践训练营,热门技术免费实践!>>>   

在Swoole处理一个请求时定义了一个REQUEST_ID的常量标记该请求,有什么办法可以在请求结束后将其销毁,等处理下次请求时重新定义吗

<无标签>
举报
Blacknc
发帖于2个月前 2回/39阅

你这个请求编号(REQUEST_ID)不就是Swoole提供的连接编号fd么?

比如在监听HTTP事件的回调函数request里,可以通过 $req->fd 或者 $res->fd 都能访问到.

<?php
$sv = new swoole_http_server(HOST, PORT);
$sv->on('request', function ($req, $res) {
	// 处理HTTP事件
	// 连接编号 $req->fd 或 $res->fd
	// 用一个全局数组保存连接对应的内容
	// $GLOBALS['app']['swoole'][$req->fd] = array();
	require __DIR__ . '/event/request.php';
});
$sv->on('close', function ($sv, $fd) {
	// 处理连接关闭事件
	// 连接编号 $fd
	// 连接关闭时删除连接对应的全局数组
	// unset($GLOBALS['app']['swoole'][$fd]);
	require __DIR__ . '/event/close.php';
});
$sv->start();

在Swoole官网文档中搜索fd可见:

https://wiki.swoole.com/wiki/search/?q=fd

fd 是一个自增数字,范围是1 ~ 1600万,fd超过1600万后会自动从1开始进行复用。
$fd是复用的,当连接关闭后fd会被新进入的连接复用。
正在维持的TCP连接fd不会被复用。

 

顶部