Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jonathanstowe/eventsource-server
A simple handler to provide Server Sent Events from Raku applications
https://github.com/jonathanstowe/eventsource-server
event-sourcery raku server-sent-events
Last synced: about 1 month ago
JSON representation
A simple handler to provide Server Sent Events from Raku applications
- Host: GitHub
- URL: https://github.com/jonathanstowe/eventsource-server
- Owner: jonathanstowe
- License: artistic-2.0
- Created: 2016-12-22T16:17:21.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-08-07T08:48:44.000Z (over 2 years ago)
- Last Synced: 2023-04-22T17:06:59.600Z (over 1 year ago)
- Topics: event-sourcery, raku, server-sent-events
- Language: Raku
- Homepage:
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
Awesome Lists containing this project
README
# EventSource::Server
A simple handler to provide Server Sent Events from Raku applications
![Build Status](https://github.com/jonathanstowe/EventSource-Server/workflows/CI/badge.svg)
## Synopsis
This sends out an event with the DateTime string every second
```raku
use EventSource::Server;
use HTTP::Server::Tiny;my $supply = Supply.interval(1).map( { EventSource::Server::Event.new(type => 'tick', data => DateTime.now.Str) } );
my &es = EventSource::Server.new(:$supply);
HTTP::Server::Tiny.new(port => 7798).run(&es)
```Or using Cro:
```raku
use EventSource::Server;use Cro::HTTP::Router;
use Cro::HTTP::Server;my $supply = Supply.interval(1).map( { EventSource::Server::Event.new(type => 'tick', data => DateTime.now.Str) } );
my $es = EventSource::Server.new(:$supply);
my $app = route {
get -> {
content 'text/event-stream', $es.out-supply;
}
};my Cro::Service $tick = Cro::HTTP::Server.new(:host, :port<7798>, application => $app);
$tick.start;
react whenever signal(SIGINT) { $tick.stop; exit; }
```And in some Javascript program somewhere else:
```javascript
var EventSource = require('eventsource');var v = new EventSource(' http://127.0.0.1:7798');
v.addEventListener("tick", function(e) {
console.info(e);}, false);
```See also the [examples directory](examples) in this distribution.
## Description
This provides a simple mechanism for creating a source of [Server Sent Events](https://www.w3.org/TR/eventsource/) in a
web server application.The EventSource interface is implemented by most modern web browsers and
provides a lightweight alternative to Websockets for those applications
where only a uni-directional message is required (for example for
notifications,)## Installation
Assuming you have a working installation of Rakudo with `zef` installed then you should be able to install this with:
zef install EventSource::Server
If you want to install this from a local copy substitute the distribution
name for the path to the local copy.## Support
This is quite a simple module but is fairly difficult to test well without
bringing in a vast array of large and otherwise un-needed modules, so
I won't be surprised there are bugs, similarly whilst I have tested for
interoperability with the Javascript hosts that I have available to me
I haven't tested against every known host that provides the EventSource
interface.So please feel free to report any problems (or make suggestions,) to
https://github.com/jonathanstowe/EventSource-Server/issues## Copyright and Licence
This is free software, please see the [LICENCE](LICENCE) file in the
distribution.© Jonathan Stowe 2017 - 2021