Pular para o conteúdo

WebSockets

Atualizado em Ver como Markdown

Server

Miniflare will always upgrade Web Socket connections. The Worker must respond with a status 101 Switching Protocols response including a webSocket. For example, the Worker below implements an echo WebSocket server:

export default {
	fetch(request) {
		const [client, server] = Object.values(new WebSocketPair());

		server.accept();
		server.addEventListener("message", (event) => {
			server.send(event.data);
		});

		return new Response(null, {
			status: 101,
			webSocket: client,
		});
	},
};

When using dispatchFetch, you are responsible for handling WebSockets by using the webSocket property on Response. As an example, if the above worker script was stored in echo.mjs:

import { Miniflare } from "miniflare";

const mf = new Miniflare({
	modules: true,
	scriptPath: "echo.mjs",
});

const res = await mf.dispatchFetch("https://example.com", {
	headers: {
		Upgrade: "websocket",
	},
});
const webSocket = res.webSocket;
webSocket.accept();
webSocket.addEventListener("message", (event) => {
	console.log(event.data);
});

webSocket.send("Hello!"); // Above listener logs "Hello!"