diff --git a/src/index.html b/src/index.html
index 304a3f2..a7fe9a6 100644
--- a/src/index.html
+++ b/src/index.html
@@ -16,7 +16,7 @@
CF Worker and DO Clocks Tests
This page logs information about the delta between its clock and the
clock of a Cloudflare worker or durable-object as observed over a
- series of requests. It has three test cases.
+ series of requests. It has several test cases.
In each test case the page sends its current time as reported by
Date.now() every 250ms to a worker (which depending on the test case
may forward it to a durable-object). The worker or durable-object
@@ -42,6 +42,16 @@
CF Worker and DO Clocks Tests
is responded to by the durable-object via a Websocket message with
the durable-object's time.
+
+ do-worker-post: time is sent via a POST request which is responded
+ to by the durable-object with a timestamp it fetches from the worker
+ over a service binding. The work computation is done on the do.
+
+
+ do-worker-internet-post: time is sent via a POST request which is responded
+ to by the durable-object with a timestamp it fetches from the worker
+ by url using internet routing. The work computation is done on the do.
+
@@ -73,6 +83,20 @@
CF Worker and DO Clocks Tests
value="do-websocket"
/>
do-websocket
+
+ do-worker-post
+
+ do-worker-internet-post
Select work per request/message:
@@ -195,6 +219,8 @@ Log (new messages are prepended)
switch (testCase) {
case "worker-post":
case "do-post":
+ case "do-worker-post":
+ case "do-worker-internet-post":
testPost();
break;
case "do-websocket":
diff --git a/src/index.ts b/src/index.ts
index 8b9b866..be94c10 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -2,6 +2,7 @@ import indexHTML from "index.html";
export interface Env {
clocksTestDO: DurableObjectNamespace;
+ clockWorker: Fetcher;
}
const worker = {
@@ -15,6 +16,7 @@ const worker = {
workerID = crypto.randomUUID();
globalThis.workerID = workerID;
}
+ console.log(workerID, "worker clockWorker", env.clockWorker);
const url = new URL(request.url);
const forward = () => {
return env.clocksTestDO
@@ -28,9 +30,13 @@ const worker = {
"content-type": "text/html;charset=UTF-8",
},
});
+ case "/now":
+ return new Response(JSON.stringify({ id: workerID, now: Date.now() }));
case "/worker-post":
- return handlePost(request, workerID, ctx);
+ return handlePost(request, workerID, Date.now(), ctx);
case "/do-post":
+ case "/do-worker-post":
+ case "/do-worker-internet-post":
case "/do-websocket":
return forward();
}
@@ -40,16 +46,36 @@ const worker = {
class ClocksTestDO implements DurableObject {
private readonly _doID: string;
+ private readonly _env: Env;
- constructor() {
+ constructor(_state: DurableObjectState, env: Env) {
+ this._env = env;
this._doID = crypto.randomUUID();
}
async fetch(request: Request): Promise {
+ console.log(this._doID, "DO clockWorker", this._env.clockWorker);
const url = new URL(request.url);
switch (url.pathname) {
+ case "/do-worker-post": {
+ const { id, now } = await (
+ await this._env.clockWorker.fetch("https://unused/now")
+ ).json<{ id: string; now: number }>();
+ return handlePost(request, this._doID + "/" + id, now);
+ }
+ case "/do-worker-internet-post": {
+ const response = await fetch(
+ "https://cf-worker-clocks-test-w-service-bindings.replicache.workers.dev/now"
+ );
+ console.log(response.status, response.statusText);
+ if (response.status !== 200) {
+ return new Response(response.statusText, response);
+ }
+ const { id, now } = await response.json<{ id: string; now: number }>();
+ return handlePost(request, this._doID + "/" + id, now);
+ }
case "/do-post":
- return handlePost(request, this._doID);
+ return handlePost(request, this._doID, Date.now());
case "/do-websocket":
return handleWebSocketConnect(request, this._doID);
}
@@ -60,6 +86,7 @@ class ClocksTestDO implements DurableObject {
async function handlePost(
request: Request,
serverID: string,
+ now: number,
ctx?: ExecutionContext
): Promise {
const url = new URL(request.url);
@@ -79,9 +106,7 @@ async function handlePost(
} else {
setTimeout(() => doWork(work), 1);
}
- return new Response(
- createResponseBody(serverID, i, pageTimestamp, Date.now())
- );
+ return new Response(createResponseBody(serverID, i, pageTimestamp, now));
}
async function handleWebSocketConnect(
diff --git a/wrangler.toml b/wrangler.toml
index 1ede0f9..e6c9b2c 100644
--- a/wrangler.toml
+++ b/wrangler.toml
@@ -1,7 +1,11 @@
-name = "cf-worker-clocks-test"
+name = "cf-worker-clocks-test-w-service-bindings"
main = "src/index.ts"
compatibility_date = "2022-06-03"
+services = [
+ { binding = "clockWorker", service = "cf-worker-clocks-test-w-service-bindings" }
+]
+
[durable_objects]
bindings = [
{ name = "clocksTestDO", class_name = "ClocksTestDO" },