RequestPool: initial implementation with TaskPool
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"fileVersion": 1,
|
||||
"versions": {
|
||||
"automem": "0.6.9",
|
||||
"cachetools": "0.3.1",
|
||||
"d-unit": "0.10.2",
|
||||
"ddbc": "0.5.9",
|
||||
@@ -12,12 +11,10 @@
|
||||
"httparsed": "1.2.1",
|
||||
"mysql-native": "3.1.0",
|
||||
"odbc": "1.0.0",
|
||||
"path-matcher": "1.1.3",
|
||||
"path-matcher": "1.1.4",
|
||||
"requests": "2.1.3",
|
||||
"slf4d": "3.0.0",
|
||||
"streams": "3.5.0",
|
||||
"test_allocator": "0.3.4",
|
||||
"undead": "1.1.8",
|
||||
"unit-threaded": "0.10.8"
|
||||
"undead": "1.1.8"
|
||||
}
|
||||
}
|
||||
|
||||
69
source/net/request_pool.d
Normal file
69
source/net/request_pool.d
Normal file
@@ -0,0 +1,69 @@
|
||||
module net.request_pool;
|
||||
|
||||
import core.thread;
|
||||
import core.sync.semaphore;
|
||||
|
||||
import std.container;
|
||||
import std.parallelism;
|
||||
|
||||
import requests;
|
||||
import slf4d;
|
||||
|
||||
struct PRequest {
|
||||
string url;
|
||||
string method = "GET";
|
||||
QueryParam[] params;
|
||||
|
||||
string body = "";
|
||||
string contentType = "text/plain";
|
||||
}
|
||||
|
||||
class RequestPool {
|
||||
private int m_totalWorkers;
|
||||
private TaskPool m_taskPool;
|
||||
private Logger _l;
|
||||
|
||||
this(int totalWorkers = 4) {
|
||||
this.m_totalWorkers = totalWorkers;
|
||||
this._l = getLogger();
|
||||
}
|
||||
|
||||
void startBackground() {
|
||||
_l.debugF!"Starting RequestPool with %d workers"(this.m_totalWorkers);
|
||||
this.m_taskPool = new TaskPool(this.m_totalWorkers);
|
||||
}
|
||||
|
||||
void request(PRequest request) {
|
||||
auto t = task(&this.m_run, request);
|
||||
this.m_taskPool.put(t);
|
||||
}
|
||||
|
||||
void stop() {
|
||||
this.m_taskPool.finish(true);
|
||||
}
|
||||
|
||||
private void m_run(PRequest request) {
|
||||
Request rq = Request();
|
||||
|
||||
_l.debugF!"Requesting [%s] %s"(request.method, request.url);
|
||||
|
||||
Response rs;
|
||||
|
||||
switch (request.method) {
|
||||
case "GET":
|
||||
rs = rq.get(request.url, request.params);
|
||||
break;
|
||||
|
||||
case "POST":
|
||||
rs = rq.post(request.url, request.body, request.contentType);
|
||||
break;
|
||||
|
||||
default:
|
||||
errorF!"Unknown request method: %s"(request.method);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
_l.debugF!"Request %s result code: %d"(request.url, rs.code);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user