
fd是tcp连接的文件描述符,在swoole_server中是客户端的唯一标识符。
fd是复用的,当连接关闭后fd会被新进入的连接复用,正在维持的TCP连接fd不会被复用。
调用swoole_server->send/swoole_server->close函数需要传入$fd参数才能被正确的处理。
如果业务中需要发送广播,需要用apc/redis/memcache/swoole_table将fd的值保存起来。
1.7.10以上版本,fd不再是文件描述符。fd是一个自增数字,范围是 1 ~ 1600万
fd超过1600万后会自动从1开始进行复用
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
function my_onReceive($serv, $fd, $from_id, $data) {
//向Connection发送数据
$serv->send($fd, 'Swoole: '.$data);
//关闭Connection
$serv->close($fd);
}
$fd为什么使用整形
$fd 使用整形而不是使用对象,主要原因是swoole是多进程的模型,在Worker进程/Task进程中随时可能要访问某一个客户端连接,如果使用对象,那就需要进行Serialize/Unserialize。增加了额外的性能开销。$fd 如果是整数那就可以直接存储传输被使用。
在PHP层可以也客户端连接可以封装成对象。面向对象的好处是可读性更好,对连接的操作可以封装到方法中。如:
$connection->send($data); $connection->close();
PHP中文网,有大量免费的Swoole入门教程,欢迎大家学习!










