I have a question about Queues and Durable Objects...
# queues-beta
m
I have a question about Queues and Durable Objects: I want to bloadcast data received by Queues to a Durable Objects WebSocket, but I don't know how. Durable Objects cannot receive queues directly at the moment (am I right?). Here is the code I am trying to write.
Copy code
ts
import { Env } from "./types";

// websocket handler durable objects
export { TestObject } from "./test_object";

export default {
  async fetch(
    request: Request,
    env: Env,
    _ctx: ExecutionContext
  ): Promise<Response> {
    return await handleErrorsWithUgrade(request, async () => {
      if (request.url.endsWith("/connect")) {
        const id = env.test.idFromName("test");
        const testObject = env.test.get(id);
        return testObject.fetch(request);
      }
      return Response.json({ ok: true });
    });
  },
  async queue(batch: MessageBatch<Error>, env: Env): Promise<void> {
    let messages = JSON.stringify(batch.messages);
    const id = env.test.idFromName("test");
    // Here: I want to connect existed socket and emit(log)
    // const testObject = env.test.get(id);
    // testObject.connect() ????

    console.log(`consumed from our queue: ${messages}`);
  },
};

async function handleErrorsWithUgrade(request: Request, func: any) {
  try {
    return await func();
  } catch (err) {
    if (request.headers.get("Upgrade") === "websocket") {
      const pair = new WebSocketPair();
      pair[1].accept();
      // @ts-ignore
      pair[1].send(JSON.stringify({ error: err.stack }));
      pair[1].close(1011, "Uncaught exception during session setup");
      return new Response(null, { status: 101, webSocket: pair[0] });
    }
    // @ts-ignore
    return new Response(err.stack, { status: 500 });
  }
}
s
Did you ever figure out if this is possible? Hoping to connect to a Durable Object WebSocket in my queue handler and can't seem to establish connectivity... 🤔