← Cloudflare Durable Objects / durable-objects / api
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"