Created
December 4, 2024 09:44
-
-
Save sugoidogo/1e979a80f9301e869de5a5143e8ec061 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { DurableObject } from "cloudflare:workers"; | |
export default { | |
/** @param {Request} request */ | |
async fetch(request, env, ctx) { | |
if(request.headers.get('Accept')!='text/event-stream'){ | |
return new Response() | |
} | |
let id = env.EVENT_SOURCE.idFromName('test'); | |
let stub = env.EVENT_SOURCE.get(id); | |
return stub.fetch(request) | |
} | |
}; | |
// Durable Object | |
export class EventSource extends DurableObject { | |
constructor(ctx, env) { | |
super(ctx, env) | |
this.ctx = ctx | |
ctx.storage.setAlarm(Date.now()+45000) | |
} | |
async alarm(){ | |
const writer=this.encoderStream.writable.getWriter() | |
writer.write(': keepalive \n\n') | |
this.ctx.storage.setAlarm(Date.now()+45000) | |
} | |
async fetch(request) { | |
this.encoderStream=new TextEncoderStream() | |
return new Response(this.encoderStream.readable, { | |
headers: { | |
"Content-Type": "text/event-stream", | |
"Cache-Control": "no-cache", | |
} | |
}) | |
} | |
async send(data,event=undefined,id=undefined){ | |
const writer=this.encoderStream.writable.getWriter() | |
if(event){ | |
writer.write('event: '+event+'\n') | |
} | |
if(id){ | |
writer.write('id: '+id+'\n') | |
} | |
for(const line of data.split('\n')){ | |
writer.write('data: '+line+'\n') | |
} | |
writer.write('\n') | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment