INTEGRITY Dokumentace

Durable Object Stub

Popis

DurableObjectStub rozhraní je klient sloužící k volání metod na vzdálené Durable Object. Typ DurableObjectStub je generický, aby bylo možné na stub volat metody RPC.

Durable Objects implementují sémantiku E-order, což je koncept odvozený z distribuovaný programovací jazyk E ↗. Když provedete více volání na stejný Durable Object, je zaručeno, že se tato volání doručí vzdálenému Durable Object ve stejném pořadí, v jakém jste je provedli. Sémantika E-order usnadňuje řešení mnoha problémů distribuovaného programování. E-order implementuje Cap'n Proto ↗ distribuovaný RPC protokol založený na object capability, který Cloudflare Workers používá pro interní komunikaci.

Pokud Durable Object vyhodí výjimku nahradí zástupnými voláními všechna probíhající volání a budoucí volání selžou s výjimky. Aby Worker mohl pokračovat ve volání metod na vzdáleném Durable Object, musí stub znovu vytvořit. Mezi různými stuby neexistují žádné záruky pořadí.

import { DurableObject } from "cloudflare:workers";

// Durable Object
export class MyDurableObject extends DurableObject {
	constructor(ctx, env) {
		super(ctx, env);
	}

	async sayHello() {
		return "Hello, World!";
	}
}

// Worker
export default {
	async fetch(request, env) {
		// A stub is a client used to invoke methods on the Durable Object
		const stub = env.MY_DURABLE_OBJECT.getByName("foo");

		// Methods on the Durable Object are invoked via the stub
		const rpcResponse = await stub.sayHello();

		return new Response(rpcResponse);
	},
};
import { DurableObject } from "cloudflare:workers";

export interface Env {
	MY_DURABLE_OBJECT: DurableObjectNamespace<MyDurableObject>;
}

// Durable Object
export class MyDurableObject extends DurableObject {
	constructor(ctx: DurableObjectState, env: Env) {
		super(ctx, env);
	}

	async sayHello(): Promise<string> {
		return "Hello, World!";
	}
}

// Worker
export default {
	async fetch(request, env) {
		// A stub is a client used to invoke methods on the Durable Object
		const stub = env.MY_DURABLE_OBJECT.getByName("foo");

		// Methods on the Durable Object are invoked via the stub
		const rpcResponse = await stub.sayHello();

		return new Response(rpcResponse);
	},
} satisfies ExportedHandler<Env>;

Vlastnosti

id

id je vlastností DurableObjectStub odpovídající DurableObjectId použitý k vytvoření stubu.

const id = env.MY_DURABLE_OBJECT.newUniqueId();
const stub = env.MY_DURABLE_OBJECT.get(id);
console.assert(id.equals(stub.id), "This should always be true");
id = env.MY_DURABLE_OBJECT.newUniqueId()
stub = env.MY_DURABLE_OBJECT.get(id)
assert id.equals(stub.id), "This should always be true"

name

name je volitelnou vlastností DurableObjectStub, která vrátí název, pokud byl zadán při vytvoření stubu, ať už přímo pomocí DurableObjectNamespace::getByName nebo nepřímo prostřednictvím DurableObjectId vytvořený DurableObjectNamespace::idFromName. Tato hodnota je nedefinovaná, pokud DurableObjectId použitý k vytvoření DurableObjectStub byl vytvořen pomocí DurableObjectNamespace::newUniqueId.

const stub = env.MY_DURABLE_OBJECT.getByName("foo");
console.assert(stub.name === "foo", "This should always be true");
stub = env.MY_DURABLE_OBJECT.getByName("foo")
assert stub.name == "foo", "This should always be true"