Zum Inhalt springen
Deutsch

Fastify-Backend

FastifyBackend ist das Default-HTTP-Backend für actor-ts. Umschließt Fastify — schnell, gut gewartet, mit einem riesigen Ökosystem an Plugins (JWT-Auth, Validierung, Swagger usw.).

import { ActorSystem, HttpExtensionId } from 'actor-ts';
const http = system.extension(HttpExtensionId);
await http.newServerAt('0.0.0.0', 8080).bind(routes);
// ↑ standardmäßig Fastify

Um das Backend explizit zu machen:

import { FastifyBackend } from 'actor-ts/http';
await http.newServerAt('0.0.0.0', 8080)
.useBackend(new FastifyBackend())
.bind(routes);
new FastifyBackend({
logger: false, // Fastifys eingebauter Logger — aus lassen; nimm actor-ts-Log
bodyLimit: 1_048_576, // 1 MiB Request-Body-Cap
tls: {
cert: fs.readFileSync('./tls/cert.pem'),
key: fs.readFileSync('./tls/key.pem'),
},
});

Die meisten Settings werden an Fastifys FastifyServerOptions durchgereicht. Das Framework konfiguriert die Routen- Registrierung; du drehst an Fastifys eigenen Reglern.

new FastifyBackend({
tls: {
cert: fs.readFileSync('./tls/cert.pem'),
key: fs.readFileSync('./tls/key.pem'),
// Für mTLS:
ca: fs.readFileSync('./tls/ca.pem'),
requestCert: true,
rejectUnauthorized: true,
},
});

Standard-Fastify-TLS-Optionen. Für die meisten Produktions-Setups terminiert TLS am Load-Balancer — die App spricht intern einfaches HTTP — aber In-App-TLS wird unterstützt, wenn nötig.

const backend = new FastifyBackend();
await http.newServerAt('0.0.0.0', 8080)
.useBackend(backend)
.bind(routes);
// Nach dem Bind ist die rohe Fastify-Instanz verfügbar:
backend.app.register(fastifyJwt, { secret: '...' });
backend.app.addHook('onRequest', authHook);

Nutze das für Plugins, die nicht über die DSL des Frameworks exponiert sind:

  • JWT-/OAuth-Authentifizierung.
  • Request-Validierung (@fastify/swagger).
  • CORS (@fastify/cors).
  • Komprimierung.

Die actor-ts-DSL behandelt Routing; Fastify-Plugins behandeln Querschnittsthemen. Sie komponieren sauber.

1. FastifyBackend.start(host, port) — erzeugt Fastify-Instanz
2. Das Framework registriert jede kompilierte Route bei Fastify
3. Fastify.listen() — öffnet den Port
4. Beim Shutdown: Fastify.close() — drained In-Flight-Requests, dann Exit

Fastify.close() wartet auf den Abschluss laufender Requests, bevor es resolved — passt zur service-stop-Phase des Coordinated Shutdown.

Terminal-Fenster
npm install fastify
# oder: bun add fastify

Das Framework bundelt Fastify nicht; separat installieren.

Grobe Zahlen für triviale Routen:

  • 150K–200K req/sec auf Bun (mit bun:test-Benchmark).
  • 80K–120K req/sec auf Node 22.
  • P50-Latenz unter einer Millisekunde für triviale Handler; höher für Routen, die Actors fragen.

Fastify ist eines der schnellsten Node-HTTP-Frameworks; der Actor-Routing-Overhead des Frameworks ist der nächste Bottleneck für heiße Routen.