shelf_eventsource 0.1.0+1

shelf_eventsource #

A shelf extension for EventSource or Server-Sent Events (SSE) that works together with the eventsource package.

How to use it? #

The usage is really easy:

import "package:shelf/shelf_io.dart" as io;
import "package:eventsource/publisher.dart";
import "package:shelf_eventsource/shelf_eventsource.dart";

EventSourcePublisher publisher = new EventSourcePublisher(cacheCapacity: 100);
var handler = eventSourceHandler(publisher);
io.serve(handler, "localhost", 8080);

For a more extensive example with routing, see the example/ directory.

Licensing #

This project is available under the MIT license, as can be found in the LICENSE file.

Changelog #

0.1.0 #

  • Initial version


import "dart:async";

import "package:shelf/shelf_io.dart" as io;
import "package:shelf_route/shelf_route.dart" as routing;

import "package:eventsource/publisher.dart";
import "package:shelf_eventsource/shelf_eventsource.dart";

main() {
  // create the publisher object that will manage event publishing to
  // subscribers
  EventSourcePublisher publisher = new EventSourcePublisher(cacheCapacity: 100);

  // generate some dummy events

  // create a shelf handler
  var handler = eventSourceHandler(publisher);
  // or create a handler for a specific channel
  var channelHandler =
      eventSourceHandler(publisher, channel: "mychannel", gzip: true);

  // create a router to serve the different event sources
  var router = routing.router();
  router.get("/events", handler);
  router.get("/mychannel", channelHandler);

  // serve localhost with our router
  io.serve(router.handler, "localhost", 8080);

generateEvents(publisher) {
  int id = 0;
  new Timer.periodic(const Duration(seconds: 1), (timer) {
    // publish an event on the default channel
        .add(new Event.message(id: "$id", data: "Always the same message?"));
    // publish event in a channel
        new Event.message(id: "$id", data: "Mychannel Message"), ["mychannel"]);
    if (id == 25) {
      // broadcast last message to both channels and close them
          new Event(event: "goodbye", data: "Goodbye all!"), ["", "mychannel"]);

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  shelf_eventsource: ^0.1.0+1

2. Install it

You can install packages from the command line:

with pub:

$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:shelf_eventsource/shelf_eventsource.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

The package version is not analyzed, because it does not support Dart 2. Until this is resolved, the package will receive a health and maintenance score of 0.

Analysis issues and suggestions

Support Dart 2 in pubspec.yaml.

The SDK constraint in pubspec.yaml doesn't allow the Dart 2.0.0 release. For information about upgrading it to be Dart 2 compatible, please see


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.0.0 <2.0.0