发布于 2026-01-06 0 阅读
0

什么是 Web Socket?如何在 Node.js 中实现 Web Socket?

什么是 Web Socket?如何在 Node.js 中实现 Web Socket?

本文将介绍什么是 WebSocket 以及如何在 Node.js 中实现 WebSocket。

什么是Web套接字?

Web Socket 是一种通信协议,它允许客户端(即浏览器)和服务器之间进行实时交互式通信。它使用一种与 HTTP 完全不同的协议,支持双向数据流,这使其区别于 HTTP。

你可能会问我,既然我们可以通过 HTTP 发送和接收消息,为什么还需要单独的协议。

有些情况下我们需要实时获取数据。例如,开发聊天应用或其他需要实时通知的应用时,我们就不能使用 HTTP 协议。本文将解释其中的原因。

HTTP协议的工作原理是什么?

在HTTP协议中,每次我们需要获取更新的数据或通知时,都需要向服务器发出请求。服务器会返回更新后的数据。

这种方法的缺点是,它会进行大量的网络调用,从而导致应用程序延迟。每次我们需要向服务器请求并更新数据时都会出现这种情况。

我们可以通过HTTP长轮询来解决这个问题。

什么是HTTP长轮询?

HTTP 长轮询是指客户端轮询服务器以获取新信息。服务器会一直保持请求打开状态,直到有新数据可用。一旦有新数据可用,服务器就会响应并发送新信息。客户端收到新信息后,会立即发送另一个请求,如此循环往复。

长轮询的问题在于处理请求需要大量资源。

试想一下,如果有数百万用户访问该应用程序,仅仅维持客户端和服务器之间的通信就需要大量的计算资源。

为了解决所有这些问题,WebSocket 就派上了用场。

WebSocket 的工作原理是什么?

WebSocket 是一种双向通信方式。客户端发送请求时会包含upgrade关键字和其他元数据。

GET ws://websocket.example.com/ HTTP/1.1
Origin: http://example.com
Connection: Upgrade
Host: websocket.example.com
Upgrade: websocket

服务器收到请求。如果服务器支持 WebSocket,它将发送握手响应。响应发送完毕后,客户端和服务器之间便建立了双向通信。

WebSocket 是一种低延迟通信协议,与 HTTP 长轮询相比,它占用的计算资源更少。

在 Node.js 中实现 WebSocket

我们将学习如何在 Node.js 中实现 WebSocket。我们将使用名为socket.io的库来实现 Node.js 中的 WebSocket 功能。

运行以下命令来引导应用程序

npm init --yes
npm install --save socket.io express 
npm install --save-dev nodemon

项目结构大致如下

在 server.js 文件中添加以下代码

const express = require('express');

const app = express();

const http = require('http').Server(app);

const socketIO = require('socket.io')(http);
const PORT = process.env.PORT || 3000;

app.use(express.static(__dirname+'/public'));

socketIO.on('connection',() => {

    socketIO.emit('welcome','web Socket Works');
})

http.listen(PORT,() => {
    console.log(`app is listening to port ${PORT}`);
})

首先,你需要导入 express 并启动服务器。你需要将 http 服务器传递给 socket。

.on('connection')开始建立与客户端的套接字连接

要触发事件,需要使用`.emit()`方法并传入事件名称。这里,您传入事件名称`welcome`以及数据`web Socket Works`。

此外,要接收事件,您需要使用.on('事件名称')。

在 public 目录下创建文件index.html,并添加以下代码。

<!doctype html>
<html>
    <head>
            <meta charset="UTF-8">
            <title>Socket.IO whiteboard</title>
    </head>
    <body>
        <h1 id="message"></h1>
    </body>
    <script src="socket.io/socket.io.js"></script>
    <script>
        const socket = io();

        socket.on('welcome',data => {
            console.log("data",data);
             document.getElementById('message').innerHTML = data;
        })
    </script>
</html>

现在,您需要使用以下命令运行服务器。

npm run start

如果您访问网址http://localhost:3000,您将看到类似这样的内容。

因此,多个客户端可以通过套接字连接到服务器/客户端并进行通信。

很酷的科技,对吧?

总之,我们可以将WebSocket应用于各种类型的应用程序中。

  • 实时应用
  • 聊天应用
  • 物联网(IoT)
  • 在线多人游戏

完整源代码:https://codesandbox.io/s/socket-demo-y0bve

本文已经介绍了什么是 Web Socket 以及如何在 Node.js 中实现 WebSocket。

我们将在下一篇文章中深入探讨 WebSocket。在此之前,祝您编程愉快:-)

同时,想了解更多关于网站开发的信息,

文章来源:https://dev.to/ganeshmani/what-are-web-sockets-implementing-web-sockets-in-node-js-3d86