Rumah  >  Artikel  >  hujung hadapan web  >  Bolehkah nodejs melaksanakan pemesejan segera?

Bolehkah nodejs melaksanakan pemesejan segera?

WBOY
WBOYasal
2023-05-16 20:34:35556semak imbas

Node.js ialah perpustakaan tak segerak dipacu peristiwa, menjadikannya ideal untuk membina aplikasi masa nyata seperti pemesejan segera.

Dalam aplikasi web tradisional, penghantaran data biasanya berdasarkan protokol HTTP. Tetapi protokol HTTP ialah protokol tindak balas permintaan, yang bermaksud bahawa pelanggan mesti menghantar permintaan baharu setiap kali ia ingin mendapatkan data baharu daripada pelayan. Ini akan menyebabkan kelewatan tertentu, yang tidak sesuai untuk aplikasi yang memerlukan respons segera.

Untuk menyelesaikan masalah di atas, disyorkan untuk menggunakan protokol WebSocket. WebSocket ialah protokol baharu yang diperkenalkan oleh HTML5 Ia membenarkan pelayan untuk menolak data kepada pelanggan dalam masa nyata, dan pelanggan juga boleh memproses data secara langsung selepas menerimanya. Mekanisme ini dilaksanakan berdasarkan sambungan TCP yang tahan lama, dan kecekapan penggunaan latensi dan lebar jalurnya lebih baik daripada teknologi tolak dan tarik berasaskan HTTP.

Dalam Node.js, menggunakan protokol WebSocket boleh dilaksanakan melalui berbilang perpustakaan, antaranya perpustakaan Socket.IO dan ws lebih biasa digunakan.

Socket.IO ialah perpustakaan berasaskan WebSocket, yang menyediakan API yang mudah untuk mengendalikan operasi seperti sambungan WebSocket, pencetusan peristiwa dan penghantaran data. Ia juga menyokong penyajian fail statik, storan tempatan dan komunikasi antara pelbagai proses. Fungsi ini boleh dengan mudah melaksanakan aplikasi masa nyata seperti pemesejan segera.

Berikut ialah beberapa contoh kod untuk melaksanakan aplikasi pemesejan segera asas menggunakan Socket.IO:

  1. Buat pelayan
const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const port = process.env.PORT || 3000;

server.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
});
  1. Dengar untuk sambungan dan terputus sambungan Buka acara dan hantar mesej
io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
  socket.on('chat message', (msg) => {
    console.log('message: ' + msg);
    io.emit('chat message', msg);
  });
});

Dalam kod ini, io.on('connection') mendengar acara sambungan Apabila pelanggan menyambung, mesej 'a user connected' akan dicetak. Dan dengarkan acara 'putus sambungan', apabila sambungan terputus, mesej 'pengguna terputus' akan dicetak. Pada masa yang sama, dengar acara 'mesej sembang' Apabila mesej diterima, cetak lognya dan hubungi io.emit('mesej sembang', msg) untuk menyiarkan mesej kepada semua pelanggan.

  1. Kod halaman pelanggan
<html>
  <head>
    <title>Chat Room</title>
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      const socket = io();
      const form = document.querySelector('form');
      const input = document.querySelector('#m');
      const messages = document.querySelector('#messages');

      form.addEventListener('submit', (e) => {
        e.preventDefault(); // 防止页面跳转
        socket.emit('chat message', input.value); // 将消息发送给服务器
        input.value = ''; // 清空消息框
        return false;
      });

      socket.on('chat message', (msg) => {
        const li = document.createElement('li'); // 创建新条目
        li.textContent = msg; // 设置新条目的文本内容
        messages.appendChild(li); // 将新条目添加到列表中
      });
    </script>
  </body>
</html>

Kod ini termasuk halaman HTML ringkas untuk memaparkan sejarah mesej bilik sembang dan borang untuk Hantar mesej baharu. Apabila pengguna menyerahkan borang, Socket.IO akan menghantar acara 'mesej' kepada pelayan, dan pelayan akan memproses acara dan menyiarkan mesej kepada semua pelanggan. Semua pelanggan mendengar acara 'mesej' dan menambah mesej yang diterima pada sejarah sembang.

Secara amnya, Node.js boleh menjadi sangat mudah untuk melaksanakan aplikasi pemesejan segera berasaskan WebSocket. Mudah untuk melaksanakan aplikasi mudah seperti bilik sembang menggunakan Socket.IO, tetapi untuk aplikasi yang kompleks, Node.js juga boleh digunakan dengan pelbagai perpustakaan dan rangka kerja lain untuk menyediakan fungsi peringkat lebih tinggi.

Atas ialah kandungan terperinci Bolehkah nodejs melaksanakan pemesejan segera?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn