我在node.js上有简单的服务器和cilent: 客户端:
var TestHost = 'localhost';
makehttprequest('o1','n1');
t = 1;
for (var i = 0; i < 1000000000; i++) {
t = t + i;
};
makehttprequest('o2', 'n2');
function makehttprequest(OldID, NewID) {
options = {
host: TestHost,
path: '/?OldID='+OldID+'&NewID='+NewID,
port: 4444
};
console.log('sending http get');
http = require('http');
http.request(options).end();
console.log('http request was sent');
} }
服务器:
var http = require("http");
var url = require("url");
function onRequest(request, response) {
console.log('onRequest');
request.setEncoding("utf8");
var strOldID = url.parse(request.url, true).query.OldID;
var strNewID = url.parse(request.url, true).query.NewID;
var body = '';
if ((strOldID !== undefined)&&(strNewID !== undefined)){
body+='answer for '+strNewID + strOldID;
console.log(body);
}else {
body+='err';
}
response.end();
}
function makeuserresponse(response, body) {
response.writeHead(200, {
"Content-Type": "text/html"
});
response.write(body);
response.end();
}
http.createServer(onRequest).listen(4444);
在这种情况下,服务器在第二次请求后同时收到两个请求。我不明白为什么会这样。为什么node.js不立即提出第一个请求?
我不在乎这个请求会同步还是异步,我只是要求在通话后立即发送请求。
我看到这个:客户端发送第一个请求,然后做一些长时间的工作,然后发送第二个请求。但是我看到了这一点:客户端实际上没有发送第一个请求,他在长时间工作后发送了两个请求。在第一个请求后的控制台中我看到:http请求已经发送,但实际上它没有被发送。它将在所有工作完成后发送
答案 0 :(得分:0)
使用child_process.fork解决问题: 添加了新文件requestsender.js:
organization.admin
并在client.js中创建:
var AdmHost = 'localhost';
function send_request(OldID, NewID) {
var options = {
host: AdmHost,
path: '/?OldID=' + OldID + '&NewID=' + NewID,
port: 4444
};
var http = require('http');
http.request(options).end();
}
process.on('message', function(msg) {
if (msg.type == 'sendrequest') {
if ((msg.OldID !== undefined) && (msg.NewID !== undefined)) {
send_request(msg.OldID, msg.NewID);
}
}
});