INTEGRITY Dokumentace

Režimy transportu

Nakonfigurujte, jak Sandbox SDK komunikuje s kontejnery pomocí přenosových režimů.

Přehled

Sandbox SDK podporuje tři přenosové režimy pro komunikaci mezi Durable Object a kontejnerem:

Kdy použít RPC transport

Použijte RPC transport, pokud váš Worker nebo Durable Object provádí mnoho operací SDK na jeden požadavek. Zabráníte tak dosažení limity subrequestů.

Limity dílčích požadavků

Cloudflare Workers mají limity subrequestů, které platí při volání externích služeb, včetně volání API kontejneru:

S HTTP transportem (výchozí) každá operace SDK (exec(), readFile(), writeFile(), atd.) spotřebuje jeden subrequest. Aplikace, které v rámci jednoho požadavku provádějí mnoho operací se sandboxem, mohou na tyto limity narazit.

Jak pomáhá RPC transport

RPC transport naváže jedno trvalé spojení s kontejnerem a multiplexuje přes něj všechny operace SDK. WebSocket upgrade se počítá jako jeden dílčí požadavek bez ohledu na to, kolik operací poté provedete.

Příklad s HTTP transportem (4 dílčí požadavky):

await sandbox.exec("python setup.py");
await sandbox.writeFile("/app/config.json", config);
await sandbox.exec("python process.py");
const result = await sandbox.readFile("/app/output.txt");

Stejný kód s přenosem RPC (1 subrequest):

// Identical code - transport is configured via environment variable
await sandbox.exec("python setup.py");
await sandbox.writeFile("/app/config.json", config);
await sandbox.exec("python process.py");
const result = await sandbox.readFile("/app/output.txt");

RPC transport zároveň odstraňuje Omezení 32 MiB který má HTTP transport. Předejte ReadableStream instanci na writeFile() metoda.

const req = await fetch("https://example.com/archive.tar.gz");
await sandbox.writeFile("/archive.tar.gz", req.body);

Konfigurace

Nastavte SANDBOX_TRANSPORT proměnná prostředí v konfiguraci vašeho Workeru. SDK ji načítá z vazeb prostředí Workeru (nikoli zevnitř kontejneru).

HTTP transport (výchozí)

HTTP transport je výchozí a nevyžaduje žádnou další konfiguraci.

Transport RPC

RPC transport povolíte přidáním SANDBOX_TRANSPORT do svého Workeru vars:

{
	"name": "my-sandbox-worker",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"vars": {
		"SANDBOX_TRANSPORT": "rpc"
	},
	"containers": [
		{
			"class_name": "Sandbox",
			"image": "./Dockerfile",
		},
	],
	"durable_objects": {
		"bindings": [
			{
				"class_name": "Sandbox",
				"name": "Sandbox",
			},
		],
	},
}
name = "my-sandbox-worker"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"

[vars]
SANDBOX_TRANSPORT = "rpc"

[[containers]]
class_name = "Sandbox"
image = "./Dockerfile"

[[durable_objects.bindings]]
class_name = "Sandbox"
name = "Sandbox"

Není potřeba měnit kód aplikace. SDK pro všechny operace automaticky použije nakonfigurovaný transport.

Chování transportu

Životní cyklus připojení

HTTP transport:

RPC transport:

Podpora streamování

Všechny transporty podporují streamované operace (například exec() s výstupem v reálném čase):

Váš kód zůstává stejný bez ohledu na režim přenosu.

Zpracování chyb

Všechny transporty poskytují stejné chování při ošetřování chyb. SDK automaticky opakuje pokusy u přechodných chyb (například odpovědí 503) s exponenciálně rostoucí prodlevou mezi pokusy (exponential backoff).

Chování specifické pro WebSocket:

Výběr transportu

Očekáváme, že RPC transport v budoucí verzi nahradí výchozí HTTP transport. Nová funkcionalita může podporovat pouze RPC transport. Přechodem na něj již nyní se v budoucnu vyhnete migracím.

Průvodce migrací

Přepínání mezi přenosovými protokoly nevyžaduje žádné změny kódu.

Přechod z HTTP na RPC

Přidejte SANDBOX_TRANSPORT do vašeho wrangler.jsonc:

{
	"vars": {
		"SANDBOX_TRANSPORT": "rpc"
	},
}
[vars]
SANDBOX_TRANSPORT = "rpc"

Poté nasaďte:

npx wrangler deploy

Přechod z RPC na HTTP

Odeberte SANDBOX_TRANSPORT proměnnou (nebo ji nastavte na "http"):

{
	"vars": {
		// Remove SANDBOX_TRANSPORT or set to "http"
	},
}
vars = { }

Přechod ze zastaralého WebSocket na RPC

Nastavte SANDBOX_TRANSPORT proměnnou na "rpc":

{
	"vars": {
		"SANDBOX_TRANSPORT": "rpc"
	},
}
[vars]
SANDBOX_TRANSPORT = "rpc"