Sha256: 0ced347cc49c53f07d69ea3eb0ed86c121852ab25ccdb3ec93c697f0b95f7acb
Contents?: true
Size: 1.43 KB
Versions: 2
Compression:
Stored size: 1.43 KB
Contents
require 'rubygems' require 'bundler/setup' require 'reel' Connections = [] Body = DATA.read app = Rack::Builder.new do map '/' do run lambda { |env| [200, {'Content-Type' => 'text/html'}, [Body]] } end map '/subscribe' do run lambda { |env| if socket = env['rack.websocket'] socket.on_message do |m| begin socket << 'Server got "%s" message' % m rescue => SocketError Connections.delete(socket) end end Connections << socket socket.read_every 1 end [200, {}, []] } end map '/wall' do run lambda { |env| msg = env['PATH_INFO'].gsub(/\/+/, '').strip msg = Time.now if msg.empty? Connections.each do |s| begin s << msg rescue => SocketError Connections.delete(s) end end [200, {'Content-Type' => 'text/html'}, ["Sent \"#{msg}\" to #{Connections.size} clients"]] } end end.to_app Rack::Handler::Reel.run app, Port: 9292 __END__ <!doctype html> <html lang="en"> <body> <input type="button" onClick="ws.send(Math.random());" value="Send a message to server"> <div id="content"></div> </body> <script type="text/javascript"> ws = new WebSocket('ws://' + window.location.host + '/subscribe'); ws.onmessage = function(e) { document.getElementById('content').innerHTML += e.data + '<br>'; } </script> </html>
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
reel-0.4.0.pre2 | examples/websocket-wall.rb |
reel-0.4.0.pre | examples/websocket-wall.rb |