From 2e78ff26fff9a3e84baf4b8893fa603c74a2cba7 Mon Sep 17 00:00:00 2001 From: Philippe Dionne Date: Tue, 15 Nov 2016 16:31:10 -0500 Subject: [PATCH 1/3] Add concurrent-ruby dependency --- dialog-api.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/dialog-api.gemspec b/dialog-api.gemspec index 158eb1a..04f5512 100644 --- a/dialog-api.gemspec +++ b/dialog-api.gemspec @@ -19,4 +19,5 @@ Gem::Specification.new do |s| s.test_files = s.files.grep(%r{^(spec)/}) s.add_dependency 'http', '~> 2.0' + s.add_dependency 'concurrent-ruby' end From 88afa2e79f7e636c3f3d30cf12b4093baaf21967 Mon Sep 17 00:00:00 2001 From: Philippe Dionne Date: Tue, 15 Nov 2016 16:31:22 -0500 Subject: [PATCH 2/3] Make track calls async by default --- lib/dialog-api/api/track.rb | 2 +- lib/dialog-api/client.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/dialog-api/api/track.rb b/lib/dialog-api/api/track.rb index c16f8e9..86a1729 100644 --- a/lib/dialog-api/api/track.rb +++ b/lib/dialog-api/api/track.rb @@ -26,7 +26,7 @@ def track(payload) } } - post("b/#{bot_id}/track", body: body) + async.post("b/#{bot_id}/track", body: body) end end end diff --git a/lib/dialog-api/client.rb b/lib/dialog-api/client.rb index 76b0acc..e4f13f2 100644 --- a/lib/dialog-api/client.rb +++ b/lib/dialog-api/client.rb @@ -1,3 +1,5 @@ +require 'concurrent' + require 'dialog-api/request' require 'dialog-api/api/conversation' require 'dialog-api/api/interlocutor' @@ -6,6 +8,8 @@ module Dialog class Client + include Concurrent::Async + include Dialog::Request include Dialog::API::Conversation include Dialog::API::Interlocutor @@ -16,6 +20,8 @@ class Client # @param options [Hash] def initialize(options = {}) + super() # Important for concurrent ruby + options = Dialog.options.merge(options) Configuration::VALID_OPTIONS_KEYS.each do |key| send("#{key}=", options[key]) From 7ab6e64b4a7bdc3f2398670dea48651159def70a Mon Sep 17 00:00:00 2001 From: Philippe Dionne Date: Tue, 15 Nov 2016 16:32:27 -0500 Subject: [PATCH 3/3] Add concurrency documentation --- Readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Readme.md b/Readme.md index f0aa4d0..6011ff0 100644 --- a/Readme.md +++ b/Readme.md @@ -124,6 +124,12 @@ messenger_dialog = Dialog.new(api_token: ENV['DIALOG_API_TOKEN'], bot_id: 'messe kik_dialog = Dialog.new(api_token: ENV['DIALOG_API_TOKEN'], bot_id: 'kik_bot_id') ``` +## Performance + +This library if built to support high performance environments. It is safe to use dialog-ruby on a web server serving hundreds of requests per second. + +Every time `track` is called an asynchronous HTTP request is sent, allowing non-blocking usage and fast response latencies. + ## Development Run all tests: