3 ms·
Interesting. I'm writing an application that will control devices over HTTP with a REST-style API (defined in OpenAPI). But we also want those devices to be abl
by ShoveItHN 5y ago
Interesting. I'm writing an application that will control devices over HTTP with a REST-style API (defined in OpenAPI). But we also want those devices to be able to alert the controlling application to events without being polled. This won't be a large datastream, but rather the occasional update of progress or notification of a state change.
I was considering Websockets or MQTT (or both), so server-sent events sound like a direct and possibly superior competitor. But from a design standpoint, what do you do? Just do a GET on some general "status" endpoint to open this SSE stream and then have the server send everything down this pipe indefinitely?
- samwillis 5y agoYes, it’s just a GET that stays open, super simple. There are various client libs that support SSE outside of browsers, worth having a look if there is one for the language you are using.
- ShoveItHN 5y agoThanks! I haven't done much network programming. While this SSE channel stays open, the controlling app will need to be able to continue to do additional traditional GET, POST, etc. calls to the server. How are responses to those distinguished from data coming in from SSE?
- eldelshell 5y agoSSE has its own API (EventSource), it's not a normal fetch/ajax request. https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events https://developer.mozilla.org/en-US/docs/Web/API/Server-sent...
- ShoveItHN 5y ago
- drothlis 5y agoSame way that if you make 2 "normal" GETs simultaneously to the same server the responses don't get mixed up, i.e. they'll be separate HTTP Connections which are separate TCP connections: > Each HTTP connection maps to one underlying transport connection. -- https://httpwg.org/http-core/draft-ietf-httpbis-messaging-latest.html#rfc.section.9.1 https://httpwg.org/http-core/draft-ietf-httpbis-messaging-la... TCP uses "port numbers" to identify different connections. 2 different connections from your PC to the same web server will use 2 different "source" ports. A port is just a number in the TCP header. https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_ports https://en.wikipedia.org/wiki/Transmission_Control_Protocol#... HTTP/1.1 added pipelining, so you can make several requests on the same TCP connection before receiving a response. But the (complete) responses must arrive in the same order of the requests so it doesn't work for SSE. HTTP/2 added request & response multiplexing on the same TCP connection. But (according to the OP) there are some limitations that affect SSE.
- toomim 5y agoYour use-case sounds perfect for Braid: https://braid.org https://braid.org This works like SSE, but is designed specifically to articulate changes to the state of HTTP/REST resources. If you're in Javascript, you can use the braidify library: https://www.npmjs.com/package/braidify https://www.npmjs.com/package/braidify
- flyinprogrammer 5y agoYou might also checkout https://rsocket.io/ https://rsocket.io/
- ShoveItHN 5y ago