Server¶
Vapor enthält einen HTTP-Server auf Basis von SwiftNIO. Der Server unterstützt die Protokolle HTTP/1, HTTP/2 und Protokollerweiterungen wie WebSockets.
Einstellungen¶
Die Einstellungen des Servers können über app.http.server eingerichtet oder verändert werden.
Servername¶
Der Hostname ist die Bezeichnung des Servers. Standardmäßig lautet der Name "127.0.0.1".
/// [configure.swift]
// Configure custom hostname.
app.http.server.configuration.hostname = "dev.local"
Serverport¶
Der Port ist die Portnummer des Servers. Der Standard-Port lautet "8080".
/// [configure.swift]
// Configure custom port.
app.http.server.configuration.port = 1337
Backlog¶
Der Parameter Backlog definiert die maximale Anzahl an ausstehenden Verbindungen zum Server. Der Standardwert lautet "256".
/// [configure.swift]
// custom backlog.
app.http.server.configuration.backlog = 128
Reuse Address¶
Der Parameter Reuse Adress allows for reuse of local addresses. Standardmäßig ist der Parameter aktiviert.
/// [configure.swift]
// Disable address reuse.
app.http.server.configuration.reuseAddress = false
TCP No Delay¶
Mit Aktivieren des Parameters TCP No Delay wird versucht die Paketverzögerung so gering wie möglich zu halten. Standardmäßig ist der Parameter aktiviert.
/// [configure.swift]
// Minimize packet delay.
app.http.server.configuration.tcpNoDelay = true
Antwortkomprimierung¶
Der Parameter responseCompression legt die Komprimierung einer Serverantwort fest. Der Parameter ist standardmäßig deaktiviert. Für die Komprimierung wird Gzip verwendet.
/// [configure.swift]
// Enable HTTP response compression.
app.http.server.configuration.responseCompression = .enabled
// Enable HTTP response compression with an initial buffer capacity
app.http.server.configuration.responseCompression = .enabled(initialByteBufferCapacity: 1024)
Anfragedekomprimierung¶
Der Parameter requestDecompression legt die Dekomprimierung einer Serveranfrage fest. Der Parameter ist standardmäßig deaktiviert. Für die Komprimierung wird Gzip verwendet.
/// [configure.swift]
// Enable HTTP request decompression.
app.http.server.configuration.requestDecompression = .enabled
// Enable HTTP request decompression with size limit
app.http.server.configuration.requestDecompression = .enabled(limit: .ratio(10))
// Enable HTTP request decompression with no size limit
app.http.server.configuration.requestDecompression = .enabled(limit: .none)
Available options are:
size
: Maximum decompressed size in bytes.ratio
: Maximum decompressed size as ratio of compressed bytes.none
: No size limits.
Setting decompression size limits can help prevent maliciously compressed HTTP requests from using large amounts of memory.
Pipelining¶
Der Parameter supportPipelining aktiviert die Unterstützung für HTTP-Pipeling. Der Parameter ist ständardmäßig deaktiviert.
/// [configure.swift]
// Support HTTP pipelining.
app.http.server.configuration.supportPipelining = true
Versions¶
Der Parameter supportVersions legt fest, welche HTTP-Versionen vom Server verwendet werden soll. Wenn TLS aktiviert ist, unterstützt Vapor standardmäßig die beiden Protokolle HTTP/1 und HTTP/2. Sobald TLS deaktiviert wird, wird nur HTTP/1 unterstützt.
/// [configure.swift]
// Disable HTTP/1 support.
app.http.server.configuration.supportVersions = [.two]
TLS¶
Der Parameter tlsConfiguration legt fest, ob TLS (SSL) verwendet werden soll. Standardmäßig ist kein TLS angegeben.
/// [configure.swift]
// Enable TLS.
app.http.server.configuration.tlsConfiguration = .makeServerConfiguration(
certificateChain: try NIOSSLCertificate.fromPEMFile("/path/to/cert.pem").map { .certificate($0) },
privateKey: try NIOSSLPrivateKey(file: "/path/to/key.pem", format: .pem))
)
For this configuration to compile you need to add import NIOSSL
at the top of your configuration file. You also might need to add NIOSSL as a dependency in your Package.swift file.
Name¶
Der Parameter serverName legt das Feld Server in der Kopfzeile einer Serverantwort fest. Standardmäßig ist kein Name angegeben.
/// [configure.swift]
// Add 'Server: vapor' header to responses.
app.http.server.configuration.serverName = "vapor"
Funktionen¶
Start¶
Der Server kann manuell gestartet werden.
// Start Vapor's server.
try app.server.start()
Shutdown¶
// Request server shutdown.
app.server.shutdown()
// Wait for the server to shutdown.
try app.server.onShutdown.wait()
Befehle¶
Serve¶
Um den Server zu starten, kannst du Terminal-Befehl serve verwenden. Der Befehl wird automatisch ausgeführt, wenn keine anderen Befehle mitangegeben werden.
swift run App serve
Es können folgende Parameter mitangegeben werden:
Name | Befehl | Beschreibung | Beispiel |
---|---|---|---|
hostname | -H | Überschreibt den vordefinierten Hostname | swift run App serve -H dev.local |
port | -p | Überschreibt den vordefinierten Port | swift run App serve -p 1337 |
bind | -b | Überschreibt den vordefinierten Hostnamen und Port | swift run App serve -b 0.0.0.0:80 |
help | --help | Hilfe | swift run App serve --help |
Hinweis¶
Der Server von Vapor kann grundsätzlich ersetzt werden. Dazu muss der neue Server von Typ Server
sein.
app.servers.use(.http)
import Vapor
final class MyServer: Server {
...
}
app.servers.use { app in
MyServer()
}
Custom servers can extend Application.Servers.Provider
for leading-dot syntax.
extension Application.Servers.Provider {
static var myServer: Self {
.init {
$0.servers.use { app in
MyServer()
}
}
}
}
app.servers.use(.myServer)