         self.keepAlive = keepAlive
     }
 
-    public convenience init(uri: URI) throws {
-        try self.init(uri: uri, keepAlive: true)
-    }
-
-    public convenience init(uri: String) throws {
-        try self.init(uri: URI(uri), keepAlive: true)
+    public convenience init(uri: String, serializer: S4.RequestSerializer = RequestSerializer(), parser: S4.ResponseParser = ResponseParser(), keepAlive: Bool = false) throws {
+        try self.init(uri: URI(uri), serializer: serializer, parser: parser, keepAlive: keepAlive)
     }
 }
 

    case portRequired
}

public final class Client {
    public let host: String
    public let port: Int
    public let serializer: S4.RequestSerializer


    public var connection: C7.Connection?

    public init(uri: URI, serializer: S4.RequestSerializer = RequestSerializer(), parser: S4.ResponseParser = ResponseParser(), keepAlive: Bool = false) throws {
        guard let host = uri.host else {
            throw ClientError.hostRequired
        }
