什么是 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




