Skip to content

Websocket interface on Rack Hijack w/ Rails support

License

Notifications You must be signed in to change notification settings

origandrew/tubesock

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tubesock

Build Status Code Climate

Tubesock lets you use websockets from rack and rails 4+ by using Rack's new hijack interface to access the underlying socket connection.

In contrast to other websocket libraries, Tubesock does not use a reactor (read: no eventmachine). Instead, it leverages Rails 4's new full-stack concurrency support. Note that this means you must use a concurrent server. We recommend Puma > 2.0.0.

Installation

Add this line to your application's Gemfile:

gem 'tubesock'

And then execute:

$ bundle

Or install it yourself as:

$ gem install tubesock

Usage

Rack

To use Tubesock with rack, you need to hijack the rack environment and then return an asynchronous response. For example:

def self.call(env)
  if websocket?(env)
    tubesock = hijack(env)
    tubesock.listen
    tubesock.onmessage do |message|
      puts "Got #{message}"
    end
    [ -1, {}, [] ]
  else
    [404, {'Content-Type' => 'text/plain'}, ['Not Found']]
  end
end

NOTE: I have not gotten the above to work just yet with just puma or thin. For now, check out the rails example.

Rails 4+

On Rails 4 there is a module you can use called Tubesock::Hijack. In a controller:

class ChatController < ApplicationController
  include Tubesock::Hijack

  def chat
    hijack do |tubesock|
      tubesock.onopen do
        tubesock.send_data "Hello, friend"
      end

      tubesock.onmessage do |data|
        tubesock.send_data "You said: #{data}"
      end
    end
  end
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Websocket interface on Rack Hijack w/ Rails support

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%