evdispatch 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +3 -0
- data/Manifest.txt +0 -1
- data/ext/revdispatch/extconf.rb +1 -0
- data/ext/revdispatch/libdispatch-0.1/autogen.sh +0 -0
- data/ext/revdispatch/libdispatch-0.1/config.guess +0 -0
- data/ext/revdispatch/libdispatch-0.1/config.sub +0 -0
- data/ext/revdispatch/libdispatch-0.1/configure +0 -0
- data/ext/revdispatch/libdispatch-0.1/depcomp +0 -0
- data/ext/revdispatch/libdispatch-0.1/install-sh +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/autogen.sh +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/config.guess +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/config.sub +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/configure +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/install-sh +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/missing +0 -0
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/mkinstalldirs +0 -0
- data/ext/revdispatch/libdispatch-0.1/missing +0 -0
- data/ext/revdispatch/libdispatch-0.1/src/ev_dispatch.cc +5 -19
- data/ext/revdispatch/libdispatch-0.1/src/ev_dispatch.h +9 -3
- data/ext/revdispatch/libdispatch-0.1/src/ev_http.cc +4 -4
- data/ext/revdispatch/libdispatch-0.1/src/ev_http.h +3 -1
- data/ext/revdispatch/libdispatch-0.1/test/key_test.cc +5 -5
- data/ext/revdispatch/libdispatch-0.1/test/next_test.cc +11 -17
- data/ext/revdispatch/revdispatch.cc +2 -1
- data/ext/revdispatch/server.rb +1 -1
- data/ext/revdispatch/test.rb +20 -17
- data/lib/evdispatch/version.rb +1 -1
- data/script/console +0 -0
- data/script/destroy +0 -0
- data/script/generate +0 -0
- data/script/txt2html +0 -0
- data/test/test_evdispatch.rb +86 -4
- data/website/index.html +10 -3
- data/website/template.html.erb +9 -2
- metadata +2 -3
- data/ext/revdispatch/libdispatch-0.1/libev-3.2/libev.la +0 -35
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -79,7 +79,6 @@ ext/revdispatch/libdispatch-0.1/libev-3.2/configure.ac
|
|
79
79
|
ext/revdispatch/libdispatch-0.1/libev-3.2/ev.3
|
80
80
|
ext/revdispatch/libdispatch-0.1/libev-3.2/ev.pod
|
81
81
|
ext/revdispatch/libdispatch-0.1/libev-3.2/install-sh
|
82
|
-
ext/revdispatch/libdispatch-0.1/libev-3.2/libev.la
|
83
82
|
ext/revdispatch/libdispatch-0.1/libev-3.2/libev.m4
|
84
83
|
ext/revdispatch/libdispatch-0.1/libev-3.2/ltmain.sh
|
85
84
|
ext/revdispatch/libdispatch-0.1/libev-3.2/missing
|
data/ext/revdispatch/extconf.rb
CHANGED
@@ -15,6 +15,7 @@ if !File.exist?("#{libdispatch}/src/.libs") or !File.exist?("#{libdispatch}/#{li
|
|
15
15
|
# copy the .a files into this folder
|
16
16
|
system("cp #{libdispatch}/src/.libs/libdispatch.a libdeps")
|
17
17
|
system("cp #{libdispatch}/#{libev}/.libs/libev.a libdeps")
|
18
|
+
system("ranlib libdeps/*.a")
|
18
19
|
end
|
19
20
|
|
20
21
|
$srcs = ['revdispatch.cc']
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -183,27 +183,13 @@ void Dispatch::timeout_cb(struct ev_loop *loop, struct ev_timer *w, int revents)
|
|
183
183
|
}
|
184
184
|
|
185
185
|
// called on the main thread, not the event loop thread
|
186
|
-
request_t Dispatch::request( Request
|
186
|
+
request_t Dispatch::request( Request *req )
|
187
187
|
{
|
188
188
|
request_t key = m_counter++;
|
189
|
-
|
190
|
-
//
|
191
|
-
|
192
|
-
|
193
|
-
req = new HttpRequest( m_http_client, key, url );
|
194
|
-
break;
|
195
|
-
case Request::SPHINX:
|
196
|
-
//req = new SphinxRequest( key, url );
|
197
|
-
break;
|
198
|
-
case Request::MEMCACHED:
|
199
|
-
break;
|
200
|
-
default:
|
201
|
-
// TODO: log an error
|
202
|
-
break;
|
203
|
-
}
|
204
|
-
m_requests.push( req );
|
205
|
-
ev_async_send( m_loop, &m_request_watcher );
|
206
|
-
return key;
|
189
|
+
req->set_key( key );
|
190
|
+
m_requests.push( req ); // load the request into the request queue
|
191
|
+
ev_async_send( m_loop, &m_request_watcher ); // signal to the event loop we have new requests pending
|
192
|
+
return key; // return to the client a unique identifier for matching up the response to this request
|
207
193
|
}
|
208
194
|
|
209
195
|
Response *Dispatch::response_for( request_t id )
|
@@ -25,11 +25,15 @@ namespace EVD {
|
|
25
25
|
Request( request_t k, const std::string &u ) : key(k), url(u){ time( &start_time); }
|
26
26
|
virtual ~Request (){ }
|
27
27
|
|
28
|
+
// by default this does nothing, each real request object can do as it pleases with this feature
|
29
|
+
virtual void set_opt( const std::string &key, const std::string &value ){}
|
30
|
+
|
31
|
+
virtual void set_key( request_t key ){ this->key = key; }
|
32
|
+
|
28
33
|
// attach to the event loop
|
29
34
|
virtual bool enable() = 0;
|
30
35
|
|
31
|
-
//
|
32
|
-
|
36
|
+
// key will be set by the dispatch object when you invoke this request
|
33
37
|
request_t key;
|
34
38
|
std::string url;
|
35
39
|
time_t start_time;
|
@@ -224,7 +228,7 @@ namespace EVD {
|
|
224
228
|
// tell the background event listener to terminate
|
225
229
|
void stop();
|
226
230
|
|
227
|
-
request_t request( Request
|
231
|
+
request_t request( Request *req );
|
228
232
|
|
229
233
|
// from the main thread, get the next available response
|
230
234
|
// just keep pop'ing off the response queue until we get something
|
@@ -252,6 +256,8 @@ namespace EVD {
|
|
252
256
|
inline struct ev_loop *get_loop(){ return m_loop; }
|
253
257
|
|
254
258
|
inline pthread_t get_thread_id()const{ return m_tid; }
|
259
|
+
|
260
|
+
inline struct HttpClient *getHttpClient()const{ return m_http_client; }
|
255
261
|
|
256
262
|
protected:
|
257
263
|
|
@@ -184,8 +184,8 @@ int HttpRequest::prog_cb(void *p, double dltotal, double dlnow, double ult, doub
|
|
184
184
|
return 0;
|
185
185
|
}
|
186
186
|
|
187
|
-
HttpRequest::HttpRequest(
|
188
|
-
: Request(
|
187
|
+
HttpRequest::HttpRequest( Dispatch &dispatch, const std::string &url )
|
188
|
+
: Request( 0, url ), response(new Response()), m_handle(curl_easy_init()), m_client(dispatch.getHttpClient())
|
189
189
|
{
|
190
190
|
memset(error,'\0', CURL_ERROR_SIZE);
|
191
191
|
curl_easy_setopt(m_handle, CURLOPT_URL, url.c_str());
|
@@ -197,9 +197,9 @@ HttpRequest::HttpRequest( HttpClient* client, request_t k, const std::string &ur
|
|
197
197
|
curl_easy_setopt(m_handle, CURLOPT_NOPROGRESS, 0);
|
198
198
|
curl_easy_setopt(m_handle, CURLOPT_PROGRESSFUNCTION, prog_cb);
|
199
199
|
curl_easy_setopt(m_handle, CURLOPT_PROGRESSDATA, this);
|
200
|
-
|
200
|
+
|
201
|
+
// setup the response object
|
201
202
|
this->response->name = url;
|
202
|
-
this->response->id = k;
|
203
203
|
}
|
204
204
|
|
205
205
|
HttpRequest::~HttpRequest()
|
@@ -43,13 +43,15 @@ namespace EVD {
|
|
43
43
|
|
44
44
|
// follow the curl handle for the duration of it's request
|
45
45
|
struct HttpRequest : public Request {
|
46
|
-
HttpRequest(
|
46
|
+
HttpRequest( Dispatch &dispatch, const std::string &url );
|
47
47
|
virtual ~HttpRequest();
|
48
48
|
|
49
49
|
virtual bool enable();
|
50
50
|
|
51
51
|
void finish( CURLcode rc );
|
52
52
|
|
53
|
+
virtual void set_key( request_t key ){ Request::set_key(key); this->response->id = key; }
|
54
|
+
|
53
55
|
static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data);
|
54
56
|
static int prog_cb(void *p, double dltotal, double dlnow, double ult, double uln);
|
55
57
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#include "ev_dispatch.h"
|
2
|
+
#include "ev_http.h"
|
2
3
|
|
3
4
|
using namespace EVD;
|
4
5
|
|
@@ -25,22 +26,21 @@ int main(int argc, char **argv)
|
|
25
26
|
|
26
27
|
printf( "dispatcher thread running...\n" );
|
27
28
|
|
28
|
-
request_t yahoo_id = dispatcher.request(
|
29
|
-
request_t google_id = dispatcher.request(
|
29
|
+
request_t yahoo_id = dispatcher.request( new HttpRequest( dispatcher, "http://www.yahoo.com/" ) );
|
30
|
+
request_t google_id = dispatcher.request(new HttpRequest( dispatcher, "http://www.google.com/" ) );
|
30
31
|
printf("yahoo: %d\n", yahoo_id);
|
31
32
|
printf("google: %d\n", google_id);
|
32
33
|
|
33
34
|
Response *res = NULL;
|
34
|
-
Timer timeout(0,5);
|
35
35
|
|
36
|
-
while( dispatcher.wait_for_response_by_id( yahoo_id,
|
36
|
+
while( dispatcher.wait_for_response_by_id( yahoo_id, Timer(1,5) ) ){
|
37
37
|
printf("waiting for yahoo...\n");
|
38
38
|
}
|
39
39
|
res = dispatcher.response_for( yahoo_id );
|
40
40
|
printf("Recieved response from yahoo: %s, Content-Length: %d\n", res->name.c_str(), res->body.length() );
|
41
41
|
delete res;
|
42
42
|
|
43
|
-
while( dispatcher.wait_for_response_by_id( google_id,
|
43
|
+
while( dispatcher.wait_for_response_by_id( google_id, Timer(1,5) ) ){
|
44
44
|
printf("waiting for google...\n");
|
45
45
|
}
|
46
46
|
|
@@ -1,4 +1,6 @@
|
|
1
|
+
|
1
2
|
#include "ev_dispatch.h"
|
3
|
+
#include "ev_http.h"
|
2
4
|
|
3
5
|
using namespace EVD;
|
4
6
|
|
@@ -12,25 +14,17 @@ static void SIGINT_handler(int sig)
|
|
12
14
|
static void run_tests( Dispatch &dispatcher, int count )
|
13
15
|
{
|
14
16
|
time_t start_time = time(NULL);
|
15
|
-
int expected_response_count = 0;
|
16
17
|
int response_count = 0;
|
17
18
|
|
18
|
-
dispatcher.request(
|
19
|
-
|
20
|
-
dispatcher.request(
|
21
|
-
|
22
|
-
dispatcher.request(
|
23
|
-
|
24
|
-
dispatcher.request(
|
25
|
-
|
26
|
-
|
27
|
-
++expected_response_count;
|
28
|
-
dispatcher.request(Request::HTTP, "http://127.0.0.1:4044/delay/1/");
|
29
|
-
++expected_response_count;
|
30
|
-
dispatcher.request(Request::HTTP, "http://127.0.0.1:4044/delay/3/");
|
31
|
-
++expected_response_count;
|
32
|
-
dispatcher.request(Request::HTTP, "http://127.0.0.1:4044/bytes/1010/");
|
33
|
-
++expected_response_count;
|
19
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/bytes/10200/" ) );
|
20
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/bytes/10080/" ) );
|
21
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/delay/2/" ) );
|
22
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/bytes/100900/" ) );
|
23
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/delay/1/" ) );
|
24
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/delay/1/" ) );
|
25
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/delay/3/" ) );
|
26
|
+
dispatcher.request( new HttpRequest( dispatcher, "http://127.0.0.1:4044/bytes/1010/" ) );
|
27
|
+
int expected_response_count = 8 ;
|
34
28
|
|
35
29
|
//ev_sleep(0.2);
|
36
30
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include "ev_dispatch.h"
|
3
|
+
#include "ev_http.h"
|
3
4
|
|
4
5
|
/* ruby 1.9 compat */
|
5
6
|
#ifndef RSTRING_PTR
|
@@ -64,7 +65,7 @@ VALUE Loop_request_http( VALUE self, VALUE url )
|
|
64
65
|
EVD::Dispatch *d;
|
65
66
|
Data_Get_Struct( self, EVD::Dispatch, d );
|
66
67
|
|
67
|
-
EVD::request_t id = d->request( EVD::
|
68
|
+
EVD::request_t id = d->request( new EVD::HttpRequest( *d, RSTRING_PTR(url) ) );
|
68
69
|
|
69
70
|
return rb_int_new(id);
|
70
71
|
}
|
data/ext/revdispatch/server.rb
CHANGED
data/ext/revdispatch/test.rb
CHANGED
@@ -2,10 +2,11 @@ require 'revdispatch'
|
|
2
2
|
|
3
3
|
# to run this through valgrind run the server outside of this script
|
4
4
|
# i run this: valgrind --leak-check=full ~/project/ruby-valgrind-env/bin/ruby test.rb r
|
5
|
+
pid = nil
|
5
6
|
unless ARGV[0] == 'r'
|
6
7
|
pid = fork do
|
7
8
|
require 'server'
|
8
|
-
|
9
|
+
start_test_server
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
@@ -59,8 +60,8 @@ def run_trial
|
|
59
60
|
|
60
61
|
ebbbase = "http://127.0.0.1:4044/"
|
61
62
|
timer = Time.now
|
62
|
-
ids = request_bytes_from( d, ebbbase,
|
63
|
-
ids += request_delay_from( d, ebbbase,
|
63
|
+
ids = request_bytes_from( d, ebbbase, 100, 1000 )
|
64
|
+
ids += request_delay_from( d, ebbbase, 100, 1 )
|
64
65
|
|
65
66
|
# wait for each response
|
66
67
|
puts "expecting #{ids.size} responses..."
|
@@ -74,27 +75,29 @@ def run_trial
|
|
74
75
|
|
75
76
|
# sometime later you can stop the event loop
|
76
77
|
d.stop
|
77
|
-
|
78
78
|
end
|
79
79
|
|
80
|
-
|
80
|
+
begin
|
81
|
+
sleep 1 unless ARGV[0] == 'r'
|
81
82
|
|
82
|
-
ObjectSpace.garbage_collect
|
83
|
+
ObjectSpace.garbage_collect
|
83
84
|
|
84
|
-
count = ObjectSpace.each_object { }
|
85
|
-
puts "Starting Total objects: #{count}"
|
85
|
+
count = ObjectSpace.each_object { }
|
86
|
+
puts "Starting Total objects: #{count}"
|
86
87
|
|
87
|
-
begin
|
88
|
-
run_trial
|
89
|
-
rescue => e
|
90
|
-
|
91
|
-
end
|
88
|
+
begin
|
89
|
+
run_trial
|
90
|
+
rescue => e
|
91
|
+
puts e.message, e.backtrace
|
92
|
+
end
|
92
93
|
|
93
94
|
|
94
|
-
Process.kill('HUP', pid) unless ARGV[0] == 'r'
|
95
|
+
Process.kill('HUP', pid) unless ARGV[0] == 'r'
|
96
|
+
count = ObjectSpace.each_object { }
|
97
|
+
puts "Final Total objects: #{count}"
|
98
|
+
count = nil
|
99
|
+
ObjectSpace.garbage_collect
|
100
|
+
end
|
95
101
|
|
96
|
-
count = ObjectSpace.each_object { }
|
97
|
-
puts "Final Total objects: #{count}"
|
98
|
-
ObjectSpace.garbage_collect
|
99
102
|
count = ObjectSpace.each_object { }
|
100
103
|
puts "After garbage collection objects: #{count}"
|
data/lib/evdispatch/version.rb
CHANGED
data/script/console
CHANGED
File without changes
|
data/script/destroy
CHANGED
File without changes
|
data/script/generate
CHANGED
File without changes
|
data/script/txt2html
CHANGED
File without changes
|
data/test/test_evdispatch.rb
CHANGED
@@ -2,10 +2,92 @@ require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
2
|
|
3
3
|
class TestEvdispatch < Test::Unit::TestCase
|
4
4
|
|
5
|
-
def
|
5
|
+
def test_object_test
|
6
|
+
# start up the test server
|
7
|
+
pid = fork do
|
8
|
+
require File.dirname(__FILE__) + '/../ext/revdispatch/server'
|
9
|
+
start_test_server
|
10
|
+
end
|
11
|
+
sleep 1 unless ARGV[0] == 'r'
|
12
|
+
|
13
|
+
d = Evdispatch::Loop.new
|
14
|
+
|
15
|
+
# start the event loop thread
|
16
|
+
d.start
|
17
|
+
|
18
|
+
begin
|
19
|
+
|
20
|
+
ObjectSpace.garbage_collect
|
21
|
+
|
22
|
+
10.times do
|
23
|
+
begin
|
24
|
+
start_count = ObjectSpace.each_object { }
|
25
|
+
duration = run_trial(d, 10)
|
26
|
+
new_count = ObjectSpace.each_object { }
|
27
|
+
puts "10 trials: #{duration} seconds, new objects #{new_count - start_count}, #{new_count} - #{start_count}"
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
start_count = ObjectSpace.each_object { }
|
32
|
+
duration = run_trial(d, 100)
|
33
|
+
new_count = ObjectSpace.each_object { }
|
34
|
+
puts "100 trials: #{duration} seconds, new objects #{new_count - start_count}, #{new_count} - #{start_count}"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
rescue => e
|
40
|
+
puts e.message, e.backtrace
|
41
|
+
end
|
42
|
+
|
43
|
+
count = ObjectSpace.each_object { }
|
44
|
+
puts "Final Total objects: #{count}"
|
45
|
+
count = nil
|
46
|
+
ObjectSpace.garbage_collect
|
47
|
+
count = ObjectSpace.each_object { }
|
48
|
+
puts "After garbage collection objects: #{count}"
|
49
|
+
|
50
|
+
# sometime later you can stop the event loop
|
51
|
+
d.stop
|
52
|
+
ensure
|
53
|
+
Process.kill('HUP', pid) unless ARGV[0] == 'r'
|
6
54
|
end
|
7
|
-
|
8
|
-
def
|
9
|
-
|
55
|
+
|
56
|
+
def request_bytes_from( d, base, amount, range )
|
57
|
+
ids = []
|
58
|
+
amount.times do|i|
|
59
|
+
am = rand( range )
|
60
|
+
ids << d.request_http( base + "bytes/#{am}/" )
|
61
|
+
end
|
62
|
+
ids
|
63
|
+
end
|
64
|
+
|
65
|
+
def request_delay_from( d, base, amount, delay )
|
66
|
+
ids = []
|
67
|
+
amount.times do|i|
|
68
|
+
am = rand( delay )
|
69
|
+
ids << d.request_http( base + "delay/#{delay}/" )
|
70
|
+
end
|
71
|
+
ids
|
72
|
+
end
|
73
|
+
|
74
|
+
def run_trial( d, trials )
|
75
|
+
|
76
|
+
ebbbase = "http://127.0.0.1:4044/"
|
77
|
+
timer = Time.now
|
78
|
+
ids = request_bytes_from( d, ebbbase, trials, 1000 )
|
79
|
+
ids += request_delay_from( d, ebbbase, trials, 1 )
|
80
|
+
|
81
|
+
# wait for each response
|
82
|
+
puts "expecting #{ids.size} responses..."
|
83
|
+
ids.each do|id|
|
84
|
+
response = d.response( id )
|
85
|
+
#puts response[:name]
|
86
|
+
end
|
87
|
+
|
88
|
+
duration = Time.now - timer
|
89
|
+
|
90
|
+
|
91
|
+
duration
|
10
92
|
end
|
11
93
|
end
|
data/website/index.html
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
<h1>evdispatch</h1>
|
19
19
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/evdispatch"; return false'>
|
20
20
|
<p>Get Version</p>
|
21
|
-
<a href="http://rubyforge.org/projects/evdispatch" class="numbers">0.1.
|
21
|
+
<a href="http://rubyforge.org/projects/evdispatch" class="numbers">0.1.3</a>
|
22
22
|
</div>
|
23
23
|
<h4 style="float:right;padding-right:10px;">→ ‘evdispatch’</h4>
|
24
24
|
|
@@ -152,8 +152,6 @@ One thing to keep in mind is the background thread will block if it has to resol
|
|
152
152
|
</p>
|
153
153
|
</div>
|
154
154
|
|
155
|
-
<!-- insert site tracking codes here, like Google Urchin -->
|
156
|
-
|
157
155
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
158
156
|
<script type="text/javascript">
|
159
157
|
window.onload = function() {
|
@@ -170,6 +168,15 @@ One thing to keep in mind is the background thread will block if it has to resol
|
|
170
168
|
versionBox.applyCornersToAll();
|
171
169
|
}
|
172
170
|
</script>
|
171
|
+
<script type="text/javascript">
|
172
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
173
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
174
|
+
</script>
|
175
|
+
<script type="text/javascript">
|
176
|
+
var pageTracker = _gat._getTracker("UA-246931-5");
|
177
|
+
pageTracker._initData();
|
178
|
+
pageTracker._trackPageview();
|
179
|
+
</script>
|
173
180
|
|
174
181
|
</body>
|
175
182
|
</html>
|
data/website/template.html.erb
CHANGED
@@ -27,8 +27,6 @@
|
|
27
27
|
</p>
|
28
28
|
</div>
|
29
29
|
|
30
|
-
<!-- insert site tracking codes here, like Google Urchin -->
|
31
|
-
|
32
30
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
33
31
|
<script type="text/javascript">
|
34
32
|
window.onload = function() {
|
@@ -45,6 +43,15 @@
|
|
45
43
|
versionBox.applyCornersToAll();
|
46
44
|
}
|
47
45
|
</script>
|
46
|
+
<script type="text/javascript">
|
47
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
48
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
49
|
+
</script>
|
50
|
+
<script type="text/javascript">
|
51
|
+
var pageTracker = _gat._getTracker("UA-246931-5");
|
52
|
+
pageTracker._initData();
|
53
|
+
pageTracker._trackPageview();
|
54
|
+
</script>
|
48
55
|
|
49
56
|
</body>
|
50
57
|
</html>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evdispatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd A. Fisher
|
@@ -108,7 +108,6 @@ files:
|
|
108
108
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/ev.3
|
109
109
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/ev.pod
|
110
110
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/install-sh
|
111
|
-
- ext/revdispatch/libdispatch-0.1/libev-3.2/libev.la
|
112
111
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/libev.m4
|
113
112
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/ltmain.sh
|
114
113
|
- ext/revdispatch/libdispatch-0.1/libev-3.2/missing
|
@@ -147,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
146
|
requirements: []
|
148
147
|
|
149
148
|
rubyforge_project: evdispatch
|
150
|
-
rubygems_version: 1.1
|
149
|
+
rubygems_version: 1.0.1
|
151
150
|
signing_key:
|
152
151
|
specification_version: 2
|
153
152
|
summary: Based on libev provides a background event loop for making simulataneous requests
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# libev.la - a libtool library file
|
2
|
-
# Generated by ltmain.sh - GNU libtool 1.5.24 (1.1220.2.456 2007/06/24 02:25:32)
|
3
|
-
#
|
4
|
-
# Please DO NOT delete this file!
|
5
|
-
# It is necessary for linking the library.
|
6
|
-
|
7
|
-
# The name that we can dlopen(3).
|
8
|
-
dlname='libev.3.dylib'
|
9
|
-
|
10
|
-
# Names of this library.
|
11
|
-
library_names='libev.3.0.0.dylib libev.3.dylib libev.dylib'
|
12
|
-
|
13
|
-
# The name of the static archive.
|
14
|
-
old_library='libev.a'
|
15
|
-
|
16
|
-
# Libraries that this one depends upon.
|
17
|
-
dependency_libs=' -lm'
|
18
|
-
|
19
|
-
# Version information for libev.
|
20
|
-
current=3
|
21
|
-
age=0
|
22
|
-
revision=0
|
23
|
-
|
24
|
-
# Is this an already installed library?
|
25
|
-
installed=no
|
26
|
-
|
27
|
-
# Should we warn about portability when linking against -modules?
|
28
|
-
shouldnotlink=no
|
29
|
-
|
30
|
-
# Files to dlopen/dlpreopen
|
31
|
-
dlopen=''
|
32
|
-
dlpreopen=''
|
33
|
-
|
34
|
-
# Directory that this library needs to be installed in:
|
35
|
-
libdir='/usr/local/lib'
|