Files
michaelschiemer/examples/async-stream-usage.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

87 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use App\Framework\Async\AsyncStream;
use App\Framework\Async\AsyncChannel;
use App\Framework\Async\FiberManager;
use App\Framework\DateTime\SystemClock;
use App\Framework\DateTime\SystemTimer;
$clock = new SystemClock();
$timer = new SystemTimer();
$fiberManager = new FiberManager($clock, $timer);
echo "=== AsyncStream Examples ===\n\n";
// Example 1: Simple data transformation pipeline
echo "1. Data Transformation Pipeline:\n";
$result = AsyncStream::range(1, 10, $fiberManager)
->filter(fn($x) => $x % 2 === 0)
->map(fn($x) => $x * $x)
->toArray();
echo "Even numbers squared: " . json_encode($result) . "\n\n";
// Example 2: Large dataset processing with chunking
echo "2. Large Dataset with Chunking:\n";
AsyncStream::range(1, 100, $fiberManager)
->chunk(20)
->map(fn($chunk) => array_sum($chunk))
->forEach(fn($sum) => echo "Chunk sum: $sum\n");
echo "\n";
// Example 3: Data aggregation
echo "3. Data Aggregation:\n";
$users = [
['name' => 'Alice', 'age' => 30, 'city' => 'Berlin'],
['name' => 'Bob', 'age' => 25, 'city' => 'Munich'],
['name' => 'Charlie', 'age' => 35, 'city' => 'Berlin'],
['name' => 'Diana', 'age' => 28, 'city' => 'Munich'],
];
$byCity = AsyncStream::from($users, $fiberManager)
->groupBy(fn($user) => $user['city']);
foreach ($byCity as $city => $users) {
echo "$city: " . count($users) . " users\n";
}
echo "\n";
// Example 4: Complex transformation
echo "4. Complex Transformation:\n";
$avgAge = AsyncStream::from($users, $fiberManager)
->filter(fn($u) => $u['city'] === 'Berlin')
->map(fn($u) => $u['age'])
->reduce(fn($sum, $age) => $sum + $age, 0) / 2;
echo "Average age in Berlin: $avgAge\n\n";
// Example 5: Channel integration
echo "5. Channel Integration:\n";
$channel = new AsyncChannel(capacity: 5);
// Producer fiber
$producer = $fiberManager->asyncCooperative(function () use ($channel, $fiberManager) {
AsyncStream::range(1, 5, $fiberManager)
->map(fn($x) => "Message-$x")
->toChannel($channel);
});
// Consumer using stream
$consumer = $fiberManager->asyncCooperative(function () use ($channel, $fiberManager) {
$messages = AsyncStream::fromChannel($channel, $fiberManager)
->toArray();
echo "Received: " . json_encode($messages) . "\n";
});
$producer->start();
$consumer->start();
while (!$producer->isTerminated() || !$consumer->isTerminated()) {
if ($producer->isSuspended()) $producer->resume();
if ($consumer->isSuspended()) $consumer->resume();
}
echo "\n=== All Examples Completed ===\n";