document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/185\">Integrate WebSockets (via sunshowers) in Sinatra application<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># create config.ru like:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   require &#39;echowebsocket&#39;<\/span>\n<span class=\"c1\">#   run EchoWebSocket.new<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># and start it with: <\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   rackup config.ru -s thin -E production -p 8000<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># echowebsocket.rb will be:<\/span>\n\n<span class=\"nb\">require<\/span> <span class=\"s1\">&#39;sinatra&#39;<\/span>\n<span class=\"nb\">require<\/span> <span class=\"s1\">&#39;sunshowers&#39;<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">Sinatra<\/span><span class=\"o\">::<\/span><span class=\"no\">Request<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Request<\/span>\n  <span class=\"kp\">include<\/span> <span class=\"no\">Sunshowers<\/span><span class=\"o\">::<\/span><span class=\"no\">WebSocket<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">EchoWebSocket<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Sinatra<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span>\n  <span class=\"n\">set<\/span> <span class=\"ss\">:sessions<\/span><span class=\"p\">,<\/span> <span class=\"kp\">true<\/span>\n\n  <span class=\"n\">get<\/span> <span class=\"s2\">&quot;/echo&quot;<\/span> <span class=\"k\">do<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">request<\/span><span class=\"o\">.<\/span><span class=\"n\">ws?<\/span>\n      <span class=\"n\">request<\/span><span class=\"o\">.<\/span><span class=\"n\">ws_handshake!<\/span>\n\n      <span class=\"n\">request<\/span><span class=\"o\">.<\/span><span class=\"n\">ws_io<\/span><span class=\"o\">.<\/span><span class=\"n\">each<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">record<\/span><span class=\"o\">|<\/span>\n        <span class=\"n\">ws_io<\/span><span class=\"o\">.<\/span><span class=\"n\">write_utf8<\/span><span class=\"p\">(<\/span><span class=\"n\">record<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">break<\/span> <span class=\"k\">if<\/span> <span class=\"n\">record<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&quot;Goodbye&quot;<\/span>\n      <span class=\"k\">end<\/span>\n\n      <span class=\"k\">begin<\/span>\n        <span class=\"n\">request<\/span><span class=\"o\">.<\/span><span class=\"n\">ws_quit!<\/span>\n      <span class=\"k\">rescue<\/span>\n        <span class=\"kp\">nil<\/span>\n      <span class=\"k\">end<\/span>\n    <span class=\"k\">end<\/span>\n    <span class=\"s2\">&quot;You&#39;re not using Web Sockets&quot;<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/zh\">zh<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/185.txt\">view raw<\/a></div>');
document.write('</div></div>');
