Keluaran JavaScript Node.js 17.0 bahagian pelayan

Node.js 17.0, platform untuk menjalankan aplikasi rangkaian dalam JavaScript, telah dikeluarkan. Node.js 17.0 ialah cawangan sokongan biasa yang akan terus menerima kemas kini sehingga Jun 2022. Dalam beberapa hari akan datang, penstabilan cawangan Node.js 16 akan selesai, yang akan menerima status LTS dan akan disokong sehingga April 2024. Penyelenggaraan cawangan LTS Node.js 14.0 sebelumnya akan berlangsung sehingga April 2023, dan tahun sebelum cawangan LTS terakhir 12.0 hingga April 2022.

Penambahbaikan utama:

  • Enjin V8 telah dikemas kini kepada versi 9.5.
  • Pelaksanaan varian API asas berdasarkan penggunaan antara muka pengkomputeran tak segerak Promise telah diteruskan. Sebagai tambahan kepada API Janji Pemasa dan Strim Janji yang ditawarkan sebelum ini, Node.js 17.0 memperkenalkan API Janji Baris Baca untuk membaca data baris demi baris menggunakan modul baris baca. import * sebagai readline daripada 'node:readline/promises'; import { stdin sebagai input, stdout sebagai output } daripada 'proses'; const rl = readline.createInterface({ input, output }); const answer = tunggu rl.question('Apa pendapat anda tentang Node.js?'); console.log('Terima kasih atas maklum balas anda yang berharga: ${answer}'); rl.close();
  • Pustaka OpenSSL yang dibekalkan telah dikemas kini kepada versi 3.0 (garpu quictls/openssl dengan sokongan protokol QUIC didayakan digunakan).
  • Mendayakan versi Node.js untuk dipaparkan dalam surih tindanan yang dikeluarkan sekiranya berlaku ralat maut yang menyebabkan aplikasi ditamatkan.

Selain itu, kita boleh menyebut penghapusan dua kelemahan dalam cawangan semasa Node.js (CVE-2021-22959, CVE-2021-22960), yang memungkinkan untuk menjalankan serangan "HTTP Request Smuggling" (HRS), yang membenarkan kami menyelitkan kandungan permintaan pengguna lain yang diproses dalam urutan yang sama antara bahagian hadapan dan bahagian belakang (contohnya, kod JavaScript yang berniat jahat boleh dimasukkan ke dalam sesi pengguna lain). Butiran akan didedahkan kemudian, tetapi buat masa ini kami hanya tahu bahawa masalah disebabkan oleh pengendalian ruang yang salah antara nama pengepala HTTP dan titik bertindih, serta pengendalian yang berbeza bagi pemulangan pengangkutan dan aksara suapan baris dalam blok parameter yang digunakan semasa menghantar badan permintaan dalam bahagian dalam mod "chunked" "

Mari kita ingat bahawa platform Node.js boleh digunakan untuk sokongan sisi pelayan bagi aplikasi Web dan untuk mencipta program rangkaian klien dan pelayan biasa. Untuk mengembangkan fungsi aplikasi untuk Node.js, koleksi modul yang besar telah disediakan, di mana anda boleh mencari modul dengan pelaksanaan HTTP, SMTP, XMPP, DNS, FTP, IMAP, pelayan dan klien POP3, modul untuk penyepaduan dengan pelbagai rangka kerja web, pengendali WebSocket dan Ajax , penyambung kepada DBMS (MySQL, PostgreSQL, SQLite, MongoDB), enjin templat, enjin CSS, pelaksanaan algoritma kriptografi dan sistem kebenaran (OAuth), penghurai XML.

Untuk memastikan pemprosesan sejumlah besar permintaan selari, Node.js menggunakan model pelaksanaan kod tak segerak berdasarkan pengendalian acara tanpa sekatan dan takrifan pengendali panggil balik. Kaedah yang disokong untuk pemultipleksan sambungan ialah epoll, kqueue, /dev/poll, dan pilih. Untuk pemultipleksan sambungan, perpustakaan libuv digunakan, yang merupakan tambahan untuk libev pada sistem Unix dan IOCP pada Windows. Pustaka libeio digunakan untuk mencipta kumpulan benang, dan c-ares disepadukan untuk melaksanakan pertanyaan DNS dalam mod tidak menyekat. Semua panggilan sistem yang menyebabkan penyekatan dilaksanakan di dalam kumpulan benang dan kemudian, seperti pengendali isyarat, memindahkan hasil kerja mereka kembali melalui paip (paip) yang tidak dinamakan. Pelaksanaan kod JavaScript disediakan melalui penggunaan enjin V8 yang dibangunkan oleh Google (selain itu, Microsoft sedang membangunkan versi Node.js dengan enjin Chakra-Core).

Pada terasnya, Node.js adalah serupa dengan Perl AnyEvent, Mesin Acara Ruby, rangka kerja Python Twisted dan pelaksanaan acara Tcl, tetapi gelung acara dalam Node.js disembunyikan daripada pembangun dan menyerupai pengendalian acara dalam aplikasi web yang berjalan. dalam pelayar. Apabila menulis aplikasi untuk node.js, anda perlu mempertimbangkan khusus pengaturcaraan dipacu peristiwa, sebagai contoh, dan bukannya melakukan "var result = db.query("select..");" dengan menunggu penyiapan kerja dan pemprosesan hasil seterusnya, Node.js menggunakan prinsip pelaksanaan tak segerak, i.e. kod diubah menjadi "db.query("select..", function (result) {result processing});", di mana kawalan akan serta-merta beralih kepada kod selanjutnya, dan hasil pertanyaan akan diproses apabila data tiba.

Sumber: opennet.ru

Tambah komen