1. Go to this page and download the library: Download tourze/quic-recovery library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tourze / quic-recovery example snippets
use Tourze\QUIC\Recovery\Recovery;
// Create recovery instance with initial RTT of 333ms
$recovery = new Recovery(333.0);
// When sending a packet
$recovery->onPacketSent(
packetNumber: 1,
packet: $packet,
sentTime: microtime(true) * 1000,
ackEliciting: true
);
// When receiving a packet
$recovery->onPacketReceived(
packetNumber: 1,
receiveTime: microtime(true) * 1000,
ackEliciting: true
);
// Check if should send ACK immediately
if ($recovery->shouldSendAckImmediately(microtime(true) * 1000)) {
$ackFrame = $recovery->generateAckFrame(microtime(true) * 1000);
// Send ACK frame...
}
use Tourze\QUIC\Recovery\Recovery;
// Create recovery mechanism with initial RTT of 333ms
$recovery = new Recovery(333.0);
use Tourze\QUIC\Packets\Packet;
// Record sent packet
$recovery->onPacketSent(
packetNumber: 1,
packet: $packet,
sentTime: microtime(true) * 1000,
ackEliciting: true
);
// Record received packet
$recovery->onPacketReceived(
packetNumber: 1,
receiveTime: microtime(true) * 1000,
ackEliciting: true
);
// Check if should send ACK immediately
if ($recovery->shouldSendAckImmediately(microtime(true) * 1000)) {
$ackFrame = $recovery->generateAckFrame(microtime(true) * 1000);
// Send ACK frame...
}
use Tourze\QUIC\Frames\AckFrame;
// When receiving ACK frame
$recovery->onAckReceived($ackFrame, microtime(true) * 1000);
$currentTime = microtime(true) * 1000;
$actions = $recovery->onTimeout($currentTime);
foreach ($actions as $action) {
switch ($action['type']) {
case 'retransmit_lost':
// Retransmit lost packets
foreach ($action['packets'] as $packetNumber) {
// Retransmission logic...
}
break;
case 'pto_probe':
// Send PTO probe packets
foreach ($action['packets'] as $probeInfo) {
// Probe logic...
}
break;
case 'send_ack':
// Send ACK frame
$ackFrame = $action['frame'];
// Send logic...
break;
}
}