Sha256: 4f66c8db09b3c466dd409e613f5a5fedc3414506522e3c1941e21e9fb1d76253
Contents?: true
Size: 914 Bytes
Versions: 1
Compression:
Stored size: 914 Bytes
Contents
require "webrick" class SSEEvent def initialize(text, type: "message", id: Time.now.to_f) @id = id @text = text @type = type end def event <<~EVENT event: #{@type} id: #{@id} data: #{@text} EVENT end end server = WEBrick::HTTPServer.new Port: 9292 clients = [] server.mount_proc "/" do |_, res| r, w = IO.pipe clients << w res.content_type = "text/event-stream" res.body = r res.chunked = true end server.mount_proc "/broadcast" do |req, _| repeat = req.query["repeat"].to_i repeat = 1 if repeat <= 0 || repeat.nil? clients.each do |client| repeat.times do |counter| client << SSEEvent.new("streaming #{counter}!").event end end end server.mount_proc "/enough" do |_, _| clients.each do |client| client << SSEEvent.new("close").event end end trap :INT do clients.each(&:close) server.shutdown end server.start
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
servent-0.1.0 | examples/config.ru |