Improve performance.
This commit is contained in:
parent
02ba0f25d3
commit
1061e177b2
6 changed files with 29 additions and 9 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
raw
|
||||
build
|
||||
.lock-wscript
|
||||
node_modules
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var Curl = require('../lib/Curl')
|
||||
var Curl = require('..').Curl
|
||||
|
||||
var p = console.log;
|
||||
var url = process.argv[2];
|
||||
|
@ -6,22 +6,25 @@ var url = process.argv[2];
|
|||
var curl = new Curl();
|
||||
|
||||
if (!url)
|
||||
url = 'www.yahoo.com';
|
||||
url = 'www.yahoo.com';
|
||||
|
||||
curl.setopt('URL', url);
|
||||
curl.setopt('CONNECTTIMEOUT', 2);
|
||||
|
||||
// on 'data' must be returns chunk.length, or means interrupt the transfer
|
||||
curl.on('data', function(chunk) {
|
||||
p("receive " + chunk.length)
|
||||
return chunk.length;
|
||||
});
|
||||
|
||||
curl.on('error', function(e) {
|
||||
p("error: " + e.message)
|
||||
curl.close();
|
||||
});
|
||||
|
||||
|
||||
curl.on('end', function() {
|
||||
p('done.')
|
||||
curl.close();
|
||||
});
|
||||
|
||||
|
|
|
@ -62,14 +62,24 @@ Curl::perform = ->
|
|||
Curl.process()
|
||||
@
|
||||
|
||||
m = 0
|
||||
p = console.log
|
||||
Curl.process = ->
|
||||
if Curl.in_process
|
||||
return
|
||||
do once = ->
|
||||
num = Curl.process_()
|
||||
if num > 0
|
||||
n = Curl.process_()
|
||||
if n > 0
|
||||
Curl.in_process = true
|
||||
setTimeout once, 80
|
||||
if n > 8192 && m < 10
|
||||
++m
|
||||
process.nextTick once
|
||||
else
|
||||
m = 0
|
||||
w = (8192 - n) * 80 / 8192
|
||||
if w < 0
|
||||
w = 0
|
||||
setTimeout once, w
|
||||
else
|
||||
Curl.in_process = false
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
curl = function() {
|
||||
return curl.perform.apply(curl, arguments);
|
||||
};
|
||||
curl.Curl = Curl;
|
||||
curl.perform = function() {
|
||||
var args, c, cb, k, length, v, _ref, _ref1, _ref2, _ref3, _ref4;
|
||||
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||
|
|
|
@ -16,6 +16,7 @@ class CurlBuilder
|
|||
curl = ->
|
||||
curl.perform.apply curl, arguments
|
||||
|
||||
curl.Curl = Curl
|
||||
curl.perform = (args...) ->
|
||||
if @running
|
||||
throw new Error 'the cURL session is busy, use curl.create to create another cURL Session'
|
||||
|
|
|
@ -24,6 +24,7 @@ class NodeCurl
|
|||
static bool is_ref;
|
||||
static std::map< CURL*, NodeCurl* > curls;
|
||||
static int count;
|
||||
static int transfered;
|
||||
|
||||
CURL * curl;
|
||||
v8::Persistent<v8::Object> handle;
|
||||
|
@ -107,6 +108,7 @@ class NodeCurl
|
|||
// curl write function mapping
|
||||
static size_t write_function(char *ptr, size_t size, size_t nmemb, void *userdata)
|
||||
{
|
||||
transfered += size * nmemb;
|
||||
NodeCurl *nodecurl = (NodeCurl*)userdata;
|
||||
return nodecurl->on_write(ptr, size * nmemb);
|
||||
}
|
||||
|
@ -294,6 +296,7 @@ class NodeCurl
|
|||
// int process()
|
||||
static v8::Handle<v8::Value> process(const v8::Arguments & args)
|
||||
{
|
||||
transfered = 0;
|
||||
if (running_handles > 0)
|
||||
{
|
||||
CURLMcode code;
|
||||
|
@ -333,7 +336,7 @@ class NodeCurl
|
|||
}
|
||||
}
|
||||
}
|
||||
return v8::Integer::New(running_handles);
|
||||
return v8::Integer::New(transfered + (int)(running_handles > 0));
|
||||
}
|
||||
|
||||
// perform()
|
||||
|
@ -452,5 +455,6 @@ int NodeCurl::running_handles = 0;
|
|||
bool NodeCurl::is_ref = false;
|
||||
std::map< CURL*, NodeCurl* > NodeCurl::curls;
|
||||
int NodeCurl::count = 0;
|
||||
int NodeCurl::transfered = 0;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue