Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gruis/sinatra-websocket

Repository files navigation

SinatraWebsocket

Makes it easy to upgrade any request to a websocket connection.

SinatraWebsocket is a fork of Skinny merged with Rack WebSocket. It provides helpers methods to detect if a request is a WebSocket request and defer to an EM::WebSocket::Connection.

Put this in your pipe ...

require 'sinatra'
require 'sinatra-websocket'
set :server, 'thin'
set :sockets, []
get '/' do
 if !request.websocket?
 erb :index
 else
 request.websocket do |ws|
 ws.onopen do
 ws.send("Hello World!")
 settings.sockets << ws
 end
 ws.onmessage do |msg|
 EM.next_tick { settings.sockets.each{|s| s.send(msg) } }
 end
 ws.onclose do
 warn("websocket closed")
 settings.sockets.delete(ws)
 end
 end
 end
end
__END__
@@ index
<html>
 <body>
 <h1>Simple Echo & Chat Server</h1>
 <form id="form">
 <input type="text" id="input" value="send a message"></input>
 </form>
 <div id="msgs"></div>
 </body>
 <script type="text/javascript">
 window.onload = function(){
 (function(){
 var show = function(el){
 return function(msg){ el.innerHTML = msg + '<br />' + el.innerHTML; }
 }(document.getElementById('msgs'));
 var ws = new WebSocket('ws://' + window.location.host + window.location.pathname);
 ws.onopen = function() { show('websocket opened'); };
 ws.onclose = function() { show('websocket closed'); }
 ws.onmessage = function(m) { show('websocket message: ' + m.data); };
 var sender = function(f){
 var input = document.getElementById('input');
 input.onclick = function(){ input.value = "" };
 f.onsubmit = function(){
 ws.send(input.value);
 input.value = "send a message";
 return false;
 }
 }(document.getElementById('form'));
 })();
 }
 </script>
</html>

And Smoke It

ruby echo.rb

Copyright

Copyright (c) 2012 Caleb Crane.

Portions of this software are Copyright (c) Bernard Potocki bernard.potocki@imanel.org and Samuel Cochran.

See License.txt for more details.

About

Makes it easy to upgrade any request to a websocket connection in Sinatra

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%

AltStyle によって変換されたページ (->オリジナル) /