Keepalive
thekid opened this issue · 6 comments
thekid commented
HTTP Connections should support Keep-Alive.
Further reading
http://docs.oracle.com/javase/7/docs/technotes/guides/net/http-keepalive.html
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.keepalive(v=vs.110).aspx
nodejs/node-v0.x-archive#4769
https://github.com/billywhizz/node-httpclient
thekid commented
💡 Idea no. 1
$conn= new HttpConnection(...);
$conn->useKeepAlive(); // Use default strategy
$conn->useKeepAlive(newinstance(KeepAlive::class, [], [
'timeout' => function($request, $response) {
if ('example.com' === $request->url->getHost()) {
return 0.0; // Close immediately
} else {
return 30.0; // Keep open for 30.0 seconds
}
}
]));
thekid commented
💡 Idea no. 2
$conn= new HttpConnection(...);
$conn->usingKeepAlive(function() {
$r1= $conn->get(...);
$r1->abort(); // Do not process content until end
$r2= $conn->post(...);
Streams::readAll($r2->in());
});
thekid commented
💡 Idea no. 3
$conn= new HttpConnection(...);
$req= $conn->create(new HttpRequest())->keepAlive();
$req= $conn->create(new HttpRequest())->keepAlive(newinstance(KeepAlive::class, [], [
// See idea #1 above
])));
$res= $conn->send($req);
thekid commented
💡 Idea no. 4
$conn= new HttpConnection(...);
$conn->get(..., function($res) {
$res->abort();
// or: Streams::readAll($res->in());
});
thekid commented
💡 Idea no. 5
$conn= new HttpConnection(...);
$pool= $conn->pool(5);
$pool->get()->then(function($res) {
// Uses first socket
});
$pool->post()->then(function($res) {
// Uses first *free* socket within the pool
});