Dengan perkembangan pesat teknologi Internet, semakin banyak aplikasi perlu melaksanakan kemas kini masa nyata atau fungsi penghantaran data. Dalam protokol HTTP tradisional, apabila pelanggan meminta data daripada pelayan, pelayan memutuskan sambungan selepas melengkapkan respons, menjadikan penghantaran data berterusan mustahil dan oleh itu tidak dapat memenuhi keperluan masa nyata. Untuk menyelesaikan masalah ini, dua teknologi, WebSocket dan sambungan panjang, telah muncul. Artikel ini terutamanya memperkenalkan cara menggunakan Node.js untuk melaksanakan teknologi sambungan panjang sebenar.
1. Apakah itu teknologi sambungan panjang
Dalam protokol HTTP tradisional, pelanggan meminta data daripada pelayan, dan pelayan akan memutuskan sambungan selepas melengkapkan respons. Walaupun kaedah sambungan jangka pendek ini menjimatkan sumber pelayan, ia juga membawa beberapa masalah. Sebagai contoh, pelanggan perlu kerap meminta data daripada pelayan, mengakibatkan pembaziran lebar jalur rangkaian pada masa yang sama, dalam aplikasi dengan keperluan masa nyata yang tinggi, pelanggan perlu terus menghantar permintaan, tetapi pelayan juga perlu; terus memproses permintaan , yang akan membawa kepada pembaziran sumber pelayan.
Teknologi sambungan panjang ialah teknologi yang mengekalkan status sambungan antara klien dan pelayan, dan boleh merealisasikan komunikasi masa nyata antara klien dan pelayan. Dalam teknologi sambungan yang panjang, selepas pelanggan meminta data daripada pelayan, pelayan tidak mengembalikan data dengan serta-merta, sebaliknya, ia mengekalkan status sambungan dan menunggu kemas kini data pada pelayan sebelum kembali. Kaedah ini boleh mengurangkan bilangan permintaan yang kerap, mengurangkan penggunaan lebar jalur rangkaian, dan juga mengurangkan beban pada pelayan.
2. Bagaimana untuk melaksanakan sambungan jangka panjang dalam Node.js
Socket.io ialah yang paling popular lama- sambungan jangka dalam Node.js Salah satu penyelesaian untuk ketersambungan. Socket.io ialah perpustakaan komunikasi masa nyata sumber terbuka yang boleh mewujudkan sambungan berterusan antara pelanggan dan pelayan untuk mencapai komunikasi dua hala. Ia menyokong berbilang protokol seperti WebSocket, HTML5 Server-Sent Events (SSE) dan Long Polling, jadi socket.io boleh menyediakan kaedah komunikasi masa nyata yang optimum di bawah penyemak imbas atau persekitaran operasi yang berbeza.
Pertama, anda perlu memasang modul socket.io dalam persekitaran Node.js:
npm install socket.io
Dalam kod pelayan, perkenalkan modul socket.io dan dengar sambungan klien:
const app = require('http').createServer(handler) const io = require('socket.io')(app) app.listen(3000) io.on('connection', (socket) => { console.log('a user connected') })
Dalam kod klien, wujudkan sambungan melalui perpustakaan socket.io:
const socket = io.connect('http://localhost:3000')
Dalam contoh ini, apabila klien berjaya mewujudkan sambungan, 'seorang pengguna yang disambungkan' akan dikeluarkan pada konsol .
Selepas sambungan diwujudkan, komunikasi dua hala boleh dicapai. Sebagai contoh, pelayan boleh menghantar mesej kepada pelanggan:
io.emit('message', { content: 'Hello World!' })
dan pelanggan boleh menerima mesej:
socket.on('message', (data) => { console.log(data.content) })
Gunakan sambungan panjang HTTP juga merupakan cara untuk melaksanakan sambungan panjang. Dalam protokol HTTP, tidak perlu memutuskan sambungan antara klien dan pelayan, dan sambungan boleh dikekalkan secara berterusan boleh dicapai dengan menghantar permintaan kosong secara berkala atau menggunakan teknologi separa tertutup.
Dalam Node.js, anda boleh menggunakan ciri kekal hidup modul HTTP untuk melaksanakan sambungan HTTP yang panjang. keep-alive ialah mekanisme untuk mengekalkan keadaan sambungan TCP. Dalam sambungan HTTP yang panjang, pelayan akan menambah kod berikut pada pengepala HTTP sebelum mengembalikan respons:
Connection: keep-alive Keep-Alive: timeout=5, max=1000
Ini bermakna pelayan memerlukan klien mengekalkan sambungan selama 5 saat dan boleh mengekalkan sehingga 1,000 sambungan.
Pelanggan boleh menggunakan atribut http.Agent
kelas keepAlive
untuk membuka sambungan panjang:
const http = require('http') const agent = new http.Agent({ keepAlive: true }) http.get({ hostname: 'localhost', port: 8080, path: '/', agent: agent }, (res) => { res.setEncoding('utf8') res.on('data', (chunk) => { console.log(chunk) }) })
Dalam contoh di atas, pelanggan membuka sambungan panjang dan menghantar HTTP GET permintaan. Apabila pelayan mempunyai kemas kini data, maklumat kemas kini akan dihantar secara automatik.
3. Senario berkaitan sambungan panjang
Teknologi sambungan panjang boleh digunakan dalam banyak senario, seperti permainan dalam talian, sembang sosial, kemas kini halaman masa nyata dan aplikasi lain yang memerlukan masa nyata prestasi. Walau bagaimanapun, sambungan yang panjang tidak berkuasa dan mempunyai kelemahan dan kekurangan tertentu.
Pertama sekali, sambungan yang panjang akan menduduki sumber pelayan kerana sambungan itu perlu dikekalkan, sekali gus meningkatkan beban pada pelayan. Jika jumlah konkurensi terlalu besar, prestasi pelayan akan berkurangan.
Kedua, sambungan yang panjang boleh menyebabkan kesesakan Apabila masa pemprosesan pelayan terlalu lama atau rangkaian pelanggan tidak stabil, sambungan mungkin tersekat atau tidak bertindak balas untuk masa yang lama.
Oleh itu, apabila menggunakan teknologi sambungan panjang, anda perlu mempertimbangkan dengan teliti senario aplikasi, memilih penyelesaian teknikal yang sesuai dan melakukan pengoptimuman yang sesuai untuk memastikan kestabilan dan prestasi aplikasi.
4. Ringkasan
Teknologi sambungan panjang ialah teknologi komunikasi masa nyata yang penting yang membantu meningkatkan sifat aplikasi masa nyata. Node.js menyediakan pelbagai cara untuk melaksanakan sambungan panjang, antaranya sambungan panjang socket.io dan HTTP adalah dua penyelesaian teknikal yang biasa digunakan. Apabila menggunakan teknologi sambungan panjang, anda perlu mempertimbangkan dengan teliti senario aplikasi dan melakukan pengoptimuman yang sesuai untuk memastikan kestabilan dan prestasi aplikasi.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan sambungan panjang sebenar dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!