Mengapakah kaedah tulis dalam objek http.ServerResponse dalam node.js segerak?
给我你的怀抱
给我你的怀抱 2017-05-31 10:38:35
0
3
682
var http = require('http');
http.createServer(function(req,res){
    res.writeHeader(200, {'Content-Type' : 'text/html ; charset=utf-8'})
    if(req.url !== '/favicon.ico'){
        console.time('test');
        var c=1,a=2,b=3;        
        res.write(show()+''+c);
        c=a+b;
        res.write('<br />')
        res.write(c+'<br />');
        console.timeEnd('test');
        res.end()        
    }
}).listen(8000)
function show(){
    var str='';
    for(var i=0;i<10000;i++){
        str+=i*i*i*i+'<br />';
    }
    return str
}
console.log('server is running at http://127.0.0.1:8000')

Dua baris terakhir ialah 1 dan 5!
Buku itu mengatakan bahawa objek http.ServerResponse melaksanakan strim.Boleh tulis (strim boleh tulis). Walau bagaimanapun, strim boleh tulis biasanya tidak segerak (seperti strim tulis fs, strim zlib, stdin sub-proses), yang sesuai untuk model perkhidmatan dipacu peristiwa. Sekarang apa yang saya uji ialah penyegerakan res.write, yang bermaksud bahawa panggilan balik ini mesti dilaksanakan sebelum panggilan balik seterusnya dalam baris gilir acara boleh dilaksanakan?
function(req,res) ialah panggilan balik acara ruquest, yang bermaksud bahawa jika anda berurusan dengan puluhan ribu permintaan serentak, anda perlu melaksanakan puluhan ribu fungsi(req,res), walaupun tiada Aplikasi intensif CPU dalam fungsi(req,res) Sedikit menambah Adakah ini tidak bermakna akan ada kelewatan dalam akses pengguna? Tetapi nod sangat baik untuk mengendalikan io intensif? Adakah saya tersalah sangka?

Saya sengaja membuat fungsi show ini, kerana js adalah single-threaded dan tidak pandai mengendalikan perniagaan intensif CPU, jadi res.write(show()+''+c) mengambil masa yang lebih lama dan kelihatan lebih baik ? Jika Jika res.write tidak segerak, maka c=a+b akan dilaksanakan dahulu;

给我你的怀抱
给我你的怀抱

membalas semua(3)
伊谢尔伦

Kelebihan nod ialah ia boleh mengendalikan konkurensi yang tinggi dan boleh mengendalikan sejumlah besar permintaan, tetapi operasi pengendalian respons. menulis atau menanya pangkalan data dikendalikan oleh urutan lain, sama seperti restoran, dengan chef dan pelayan ( Satu utas), tidak seperti rangka kerja perkhidmatan web am yang hanya mempunyai seorang chef dan pelayan sambilan,
Jadi situasi anda di atas bukanlah IO yang intensif, tetapi seperti, chef di restoran terlalu sibuk untuk mengendalikan hidangan anda, menyebabkan pelayan itu menghidangkan hidangan dengan perlahan .

滿天的星座

Jelas sekali, pelaksanaan show()时,还没有开始执行write(), jadi kaedah ujian anda sendiri adalah salah.

滿天的星座

writeIa hanya menulis data ke penimbal dalaman dan kemudian kembali Ini tidak bermakna ia kembali selepas data dihantar, jadi ia tidak mengambil masa CPU

.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan