Max Maischein


HTTP::ServerEvent - create strings for HTTP Server Sent Events

->as_string( %options )

  return HTTP::ServerEvent->as_string(
    event => "ping",
    data => time(),
    retry => 5000, # retry in 5 seconds if disconnected
    id => $counter++,

Returns a string that can be sent as a server-sent event through the socket.

The allowed options are:

  • event - the type of event (optional). This is the event type you will want to listen to on the other side. Newlines or null characters in the event type are treated as a fatal error.

  • data - the data to be sent. This can be either a string or an array reference of strings. Note that embedded newlines (either \x{0d} , \x{0a} or \x{0d}\x{0a} ) will be interpreted as newlines and be normalized to the \x{0d}\x{0a} pairs that are sent over the wire.

  • id - the event id. If you send this, a client will send the Last-Event-Id header when reconnecting, allowing you to send the events missed while offline. Newlines or null characters in the event id are treated as a fatal error.

  • retry - the amount of miliseconds to wait before reconnecting if the connection is lost. Newlines or null characters in the retry interval are treated as a fatal error.

Javascript EventSource object

To receive events on the other side, usually in a browser, you will want to instantiate an EventSource object.

  var events = new EventSource('/events');
  // Subscribe to "tick" event
  events.addEventListener('tick', function(event) {
    var out= document.getElementById("my_console");
  }, false);

Last-Event-Id Header

If you're sending events, you may want to look at the Last-Event-Id HTTP header. This header is sent by the EventSource object when reestablishing a connection that was intermittently lost. You can use this to bring the reconnecting client up to date with the current state instead of transmitting the complete state.



The public repository of this module is


The public support forum of this module is


Please report bugs in this module via the RT CPAN bug queue at or via mail to


Max Maischein


Copyright 2013-2013 by Max Maischein


This module is released under the same terms as Perl itself.