Upgrade to Pro — share decks privately, control downloads, hide ads and more …

jRuby and Ratpack

Max Mulatz
January 05, 2017

jRuby and Ratpack

Slides for my talk about jRuby and Ratpack.io at the vienna.rb Ruby Usergroup.

Max Mulatz

January 05, 2017
Tweet

More Decks by Max Mulatz

Other Decks in Programming

Transcript

  1. max

  2. GIL

  3. public class Main { public static void main(String... args) throws

    Exception { RatpackServer.start(server -> server .handlers(chain -> chain .get(ctx -> ctx.render("Hello World")) ) ); } } # https:/ /ratpack.io/manual/current/launching.html#launching
  4. require 'java' require 'jruby/core_ext' require 'bundler/setup' Bundler.require java_import 'ratpack.server.RatpackServer' RatpackServer.start

    do |server| server.handlers do |chain| chain.get do |ctx| ctx.render 'Hello World from Ratpack / jRuby' end end end # github.com/klappradla/jruby_ratpack_examples/hello_world
  5. # server.rb RatpackServer.start do |server| server.handlers do |chain| chain.get do

    |ctx| ctx.render 'Hello World from Ratpack / jRuby' end chain.all(Handler::Default) end end # handler/default.rb module Handler class Default def self.handle(ctx) ctx.render 'Nothing here, sorry ¯\_(ツ)_/¯' end end end # https:/ /ratpack.io/manual/current/api/ratpack/handling/Handler.html
  6. java_import 'ratpack.server.RatpackServer' java_import 'ratpack.exec.Blocking' require 'json' RatpackServer.start do |server| server.handlers

    do |chain| chain.get('music') do |ctx| Blocking.get do DB[:albums].all end.then do |albums| ctx.render(JSON.dump(albums)) end end end end # https:/ /ratpack.io/manual/current/async.html#performing_blocking_operations_eg_io
  7. # server RatpackServer.start do |server| server.handlers do |chain| chain.get('music', Handler::Music)

    end end # github.com/klappradla/jruby_ratpack_examples/db_example
  8. module Handler class Music class << self def handle(ctx) get_data.then

    do |data| render(ctx, data) end end private def get_data Blocking.get { DB[:albums].all } end def render(ctx, data) ctx.render(Jackson.json(data)) end end end end # github.com/klappradla/jruby_ratpack_examples/db_example
  9. class Server def self.run RatpackServer.start do |server| server.handlers do |chain|

    chain.all(RequestLogger.ncsa) chain.get('music', Handler::Music) chain.get('planets', Handler::Planets) chain.all(Handler::NotFound) end end end end # github.com/klappradla/jruby_ratpack_examples/http_example
  10. module Handler class Base def self.handle(args) new(*args).handle end def initialize(ctx)

    @ctx = ctx end def handle raise NotImplementedError end private attr_reader :ctx def response @response ||= ctx.get_response end end end # github.com/klappradla/jruby_ratpack_examples/http_example
  11. module Handler class Planets < Base URL = java.net.URI.new('http://swapi.co/api/planets') def

    handle call_api.then do |resp| render(resp) end end private def call_api client.get(URL) end def client ctx.get(HttpClient.java_class) end def render(resp) response.send(‘application/json;charset=UTF-8', resp.get_body.get_text) end end end # github.com/klappradla/jruby_ratpack_examples/http_example
  12. # sinatra Running 1m test @ http://localhost:5050 4 threads and

    100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 302.15ms 417.23ms 1.99s 84.58% Req/Sec 122.99 63.97 380.00 66.50% 29176 requests in 1.00m, 83.26MB read Socket errors: connect 0, read 0, write 0, timeout 552 Non-2xx or 3xx responses: 9735 Requests/sec: 485.58 Transfer/sec: 1.39MB # ratpack Running 1m test @ http://localhost:5050 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 183.24ms 255.69ms 1.97s 86.30% Req/Sec 328.76 141.23 830.00 68.23% 78379 requests in 1.00m, 200.23MB read Socket errors: connect 0, read 0, write 0, timeout 13 Non-2xx or 3xx responses: 26268 Requests/sec: 1305.99 Transfer/sec: 3.34MB # github.com/klappradla/jruby_ratpack_examples/benchmarks
  13. # github.com/klappradla/jruby_ratpack_examples/benchmarks # sinatra Running 1m test @ http://localhost:5050 4

    threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 302.15ms 417.23ms 1.99s 84.58% Req/Sec 122.99 63.97 380.00 66.50% 29176 requests in 1.00m, 83.26MB read Socket errors: connect 0, read 0, write 0, timeout 552 Non-2xx or 3xx responses: 9735 Requests/sec: 485.58 Transfer/sec: 1.39MB # ratpack Running 1m test @ http://localhost:5050 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 183.24ms 255.69ms 1.97s 86.30% Req/Sec 328.76 141.23 830.00 68.23% 78379 requests in 1.00m, 200.23MB read Socket errors: connect 0, read 0, write 0, timeout 13 Non-2xx or 3xx responses: 26268 Requests/sec: 1305.99 Transfer/sec: 3.34MB