README.md in em-synchrony-0.1.4 vs README.md in em-synchrony-0.1.5

- old
+ new

@@ -1,10 +1,10 @@ # EM-Synchrony -http://www.igvita.com/2010/03/22/untangling-evented-code-with-ruby-fibers +Blog post: [Untangling Evented Code with Ruby Fibers](http://www.igvita.com/2010/03/22/untangling-evented-code-with-ruby-fibers) -Collection of convenience classes and patches to common EventMachine clients to +Collection of convenience classes and patches to common EventMachine clients to make them Fiber aware and friendly. Word of warning: even though fibers have been backported to Ruby 1.8.x, these classes assume Ruby 1.9 (if you're using fibers in production, you should be on 1.9 anyway) Features: @@ -13,75 +13,85 @@ * Multi request interface which accepts any callback enabled client * Fibered iterator to allow concurrency control & mixing of sync / async * em-http-request: .get, etc are synchronous, while .aget, etc are async * em-mysqlplus: .query is synchronous, while .aquery is async * remcached: .get, etc, and .multi_* methods are synchronous + * bitly: synchronous api calls with EM::HttpRequest. ## Example with async em-http client: + require "em-synchrony/em-http" + EventMachine.synchrony do + res = EventMachine::HttpRequest.new("http://www.postrank.com").get + p "Look ma, no callbacks!" + p res - EventMachine.synchrony do - res = EventMachine::HttpRequest.new("http://www.postrank.com").get - - p "Look ma, no callbacks!" - p res - - EventMachine.stop + EventMachine.stop end ## EM Iterator & mixing sync / async code - EM.synchrony do - concurrency = 2 - urls = ['http://url.1.com', 'http://url2.com'] + require "em-synchrony/em-http" + EM.synchrony do + concurrency = 2 + urls = ['http://url.1.com', 'http://url2.com'] - # iterator will execute async blocks until completion, .each, .inject also work! - results = EM::Synchrony::Iterator.new(urls, concurrency).map do |url, iter| + # iterator will execute async blocks until completion, .each, .inject also work! + results = EM::Synchrony::Iterator.new(urls, concurrency).map do |url, iter| - # fire async requests, on completion advance the iterator - http = EventMachine::HttpRequest.new(url).aget - http.callback { iter.return(http) } - end + # fire async requests, on completion advance the iterator + http = EventMachine::HttpRequest.new(url).aget + http.callback { iter.return(http) } + end - p results # all completed requests + p results # all completed requests + EventMachine.stop + end - EventMachine.stop - end - ## Example connection pool shared by a fiber: - EventMachine.synchrony do - db = EventMachine::Synchrony::ConnectionPool.new(size: 2) do - EventMachine::MySQL.new(host: "localhost") - end + require "em-synchrony/em-mysqlplus" + EventMachine.synchrony do + db = EventMachine::Synchrony::ConnectionPool.new(size: 2) do + EventMachine::MySQL.new(host: "localhost") + end - start = now + multi = EventMachine::Synchrony::Multi.new + multi.add :a, db.aquery("select sleep(1)") + multi.add :b, db.aquery("select sleep(1)") + res = multi.perform - multi = EventMachine::Synchrony::Multi.new - multi.add :a, db.aquery("select sleep(1)") - multi.add :b, db.aquery("select sleep(1)") - res = multi.perform + p "Look ma, no callbacks, and parallel MySQL requests!" + p res - p "Look ma, no callbacks, and parallel MySQL requests!" - p res + EventMachine.stop + end - EventMachine.stop - end +## Example with multi-request async em-http client: + require "em-synchrony/em-http" + EventMachine.synchrony do + multi = EventMachine::Synchrony::Multi.new + multi.add :a, EventMachine::HttpRequest.new("http://www.postrank.com").aget + multi.add :b, EventMachine::HttpRequest.new("http://www.postrank.com").apost + res = multi.perform -## Example with multi-request async em-http client: + p "Look ma, no callbacks, and parallel HTTP requests!" + p res - EventMachine.synchrony do - multi = EventMachine::Synchrony::Multi.new - multi.add :a, EventMachine::HttpRequest.new("http://www.postrank.com").aget - multi.add :b, EventMachine::HttpRequest.new("http://www.postrank.com").apost - res = multi.perform - - p "Look ma, no callbacks, and parallel HTTP requests!" - p res - - EventMachine.stop - end - + EventMachine.stop + end + +## Example with async Bitly client: + + require "em-synchrony/em-bitly" + EM.synchrony do + bitly = Bitly.new('[INSERT_LOGIN]', '[INSERT_API_KEY]') + url = 'http://github.com/igrigorik/em-synchrony' + short = bitly.shorten(url) + + p "Short #{url} => #{short.jmp_url}" + end + # License (The MIT License) Copyright (c) 2010 Ilya Grigorik \ No newline at end of file