evdispatch 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|