amphp / quic
Requires
- ext-ffi: *
- amphp/socket: ^2
Requires (Dev)
- amphp/php-cs-fixer-config: ^2
- amphp/phpunit-util: ^3
- amphp/process: ^2
- ircmaxell/ffime: dev-master
- phpunit/phpunit: ^9
- psalm/phar: ^5.4
This package is auto-updated.
Last update: 2024-08-25 01:04:58 UTC
README
AMPHP 是一个针对 PHP 设计的事件驱动库集合,考虑到纤维和并发。 amphp/quic
是一个用于建立 quic 连接的库。它为客户端和服务器提供了套接字抽象。它抽象了 cloudflare/quiche 库的低级别。
安装
此包可以作为 Composer 依赖项安装。
composer require amphp/quic
需求
amphp/quic
实现了 amphp/socket
的基本服务器和客户端接口。它需要已安装的 FFI 扩展。
TLS
由于 QUIC 需要 TLS,因此服务器端必须有一个有效的证书。另外,必须指定一个或多个应用层协议名称 (ALPN)。
注意:不支持指纹识别并将其忽略。要使用自签名证书,需要禁用对等验证或拥有适当的自定义根 CA。
连接到服务器
最简单的方式是提供目标和 ALPN 协议。
$quicConnection = \Amp\Quic\connect("example.com:1234", ["alpn protocol"]);
处理连接
每个 QUIC 连接都是多路复用流。 QuicConnection
允许创建和接受新的流。
使用 accept()
等待新的流 (QuicSocket
),类似于 Amp\Socket\ServerSocket
。使用 openStream()
创建新的流。还可以使用 sendDatagram()
和 receiveDatagram()
在连接上发送和接收数据报。
QUIC 流实现了 Amp\Socket\Socket
以发送和接收数据。
通过 close()
(或丢失所有对该对象的引用) 立即终止所有流。
服务器
amphp/quic
允许通过 UDP 监听传入的 QUIC 连接。与客户端类似,它需要一个 ALPN 协议。另外,还需要有效的 TLS 证书。
$tls = (new ServerTlsContext) ->withDefaultCertificate(new Certificate(__DIR__ . "/cert.pem", __DIR__ . "/key.pem")) ->withApplicationLayerProtocols(["test"]); $quicServerSocket = \Amp\Quic\bind(["0.0.0.0:1234", "[::]:1234"], $tls);
注意:不支持基于 SNI 的证书区分。必须通过 ServerTlsContext::withDefaultCertificate()
提供一个证书。
接受连接
可以在 QuicServerSocket
上使用 accept()
,但这将直接返回一个 QuicSocket
。当连接没有特定意义且流是你感兴趣的一切时,推荐使用此模式。
要实际获取 QuicConnection
,请使用 acceptConnection()
while ($quicConnection = $quicServerSocket->acceptConnection()) { async(function() use ($quicConnection) { // handle the connection, open and accept new streams, send and receive datagrams }) }
配置
虽然大多数 Amp\Socket\ConnectContext
和 Amp\Socket\BindContext
的配置被理解和应用,但还有由 QuicConfig
、相应的子类 QuicClientConfig
和 QuicServerConfig
提供的特定于 QUIC 的配置,这些配置分别由 connect()
和 bind()
函数接受。
请注意,QUIC 接口通常接受各种类型的通信,即单向流、双向流和数据报,同时还有空闲超时以实现及时连接超时,并且每隔一段时间发送一个 ping 以防止活动连接超时。特别是,QUIC 服务器可能希望调整这些设置。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件 me@kelunik.com
反馈,而不是使用问题跟踪器。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 LICENSE
。