jRuby and Ratpack

jRuby and Ratpack

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

F85cfa2c6c69d94bc48ece99b7b2cb59?s=128

Max Mulatz

January 05, 2017
Tweet

Transcript

  1. 3.

    max

  2. 5.
  3. 6.
  4. 7.
  5. 8.
  6. 9.

    GIL

  7. 11.
  8. 13.
  9. 14.
  10. 15.
  11. 21.
  12. 22.

    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
  13. 26.

    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
  14. 27.

    # 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
  15. 29.

    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
  16. 30.

    # server RatpackServer.start do |server| server.handlers do |chain| chain.get('music', Handler::Music)

    end end # github.com/klappradla/jruby_ratpack_examples/db_example
  17. 31.

    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
  18. 33.

    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
  19. 34.

    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
  20. 35.

    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
  21. 36.
  22. 38.

    # 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
  23. 39.

    # 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