![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/lib/gems/2.5.0/gems/em-synchrony-1.0.3/examples/ |
Upload File : |
require "lib/em-synchrony" EM.synchrony do # open 4 concurrent MySQL connections db = EventMachine::Synchrony::ConnectionPool.new(size: 4) do EventMachine::MySQL.new(host: "localhost") end # perform 4 http requests in parallel, and collect responses multi = EventMachine::Synchrony::Multi.new multi.add :page1, EventMachine::HttpRequest.new("http://service.com/page1").aget multi.add :page2, EventMachine::HttpRequest.new("http://service.com/page2").aget multi.add :page3, EventMachine::HttpRequest.new("http://service.com/page3").aget multi.add :page4, EventMachine::HttpRequest.new("http://service.com/page4").aget data = multi.perform.responses[:callback].values # insert fetched HTTP data into a mysql database, using at most 2 connections at a time # - note that we're writing async code within the callback! EM::Synchrony::Iterator.new(data, 2).each do |page, iter| db.aquery("INSERT INTO table (data) VALUES(#{page});") db.callback { iter.return(http) } end puts "All done! Stopping event loop." EventMachine.stop end