in Sources/NIOExtrasPerformanceTester/HTTP1PerformanceTestFramework.swift [164:203]
func run() throws -> Int {
var reqs: [Int] = []
reqs.reserveCapacity(self.numberOfRepeats)
for _ in 0..<self.numberOfRepeats {
var requestHandlers: [RepeatedRequests] = []
requestHandlers.reserveCapacity(self.numberOfClients)
var clientChannels: [Channel] = []
clientChannels.reserveCapacity(self.numberOfClients)
for _ in 0 ..< self.numberOfClients {
let clientChannel = try! ClientBootstrap(group: self.group)
.channelInitializer { channel in
channel.pipeline.addHTTPClientHandlers().flatMap {
let repeatedRequestsHandler = RepeatedRequests(numberOfRequests: self.requestsPerClient,
eventLoop: channel.eventLoop,
head: self.head)
requestHandlers.append(repeatedRequestsHandler)
return channel.pipeline.addHandler(repeatedRequestsHandler)
}.flatMap {
self.extraInitialiser(channel)
}
}
.connect(to: self.serverChannel.localAddress!)
.wait()
clientChannels.append(clientChannel)
}
var writeFutures: [EventLoopFuture<Void>] = []
for clientChannel in clientChannels {
clientChannel.write(NIOAny(HTTPClientRequestPart.head(self.head)), promise: nil)
writeFutures.append(clientChannel.writeAndFlush(NIOAny(HTTPClientRequestPart.end(nil))))
}
let allWrites = EventLoopFuture<Void>.andAllComplete(writeFutures, on: writeFutures.first!.eventLoop)
try! allWrites.wait()
let streamCompletedFutures = requestHandlers.map { rh in rh.completedFuture }
let requestsServed = EventLoopFuture<Int>.reduce(0, streamCompletedFutures, on: streamCompletedFutures.first!.eventLoop, +)
reqs.append(try! requestsServed.wait())
}
return reqs.reduce(0, +) / self.numberOfRepeats
}