Node.js 中的 Websocket 服务器

发布于 2023-01-08 18:51:23 字数 2260 浏览 54 评论 0

Websockets 是浏览器客户端和服务器之间进行双向通信的工具。 websockets 的特别之处在于它们使服务器能够将数据推送到客户端,以下是如何在 Node.js 中启动 websocket 服务器。

使用 ws

wsnpm 包 是 Node.js 事实上的 WebSocket 库。 ws 包还包括一个 websocket 客户端,这对测试很有用。

下面是一个 WebSocket 服务器的基本示例,它跟踪所有打开的套接字并将入站消息发送到所有打开的套接字。 您可以将其视为一个简单的聊天服务器:当一个人发送消息时,服务器会将消息广播给所有收听的人。

const WebSocket = require('ws');
const server = new WebSocket.Server({
  port: 8080
});

let sockets = [];
server.on('connection', function(socket) {
  sockets.push(socket);

  // When you receive a message, send that message to every socket.
  socket.on('message', function(msg) {
    sockets.forEach(s => s.send(msg));
  });

  // When a socket closes, or disconnects, remove it from the array.
  socket.on('close', function() {
    sockets = sockets.filter(s => s !== socket);
  });
});

使用 ws 和 Express

上面的 ws 服务器必须有自己的端口:它不能监听与 Express 服务器相同的端口。 但是,您可以 使用 ws处理来自 Express 的 websockets,中所述收听 Express HTTP 服务器的 升级事件 方法是按照 ws 文档

const express = require('express');
const ws = require('ws');

const app = express();

// Set up a headless websocket server that prints any
// events that come in.
const wsServer = new ws.Server({ noServer: true });
wsServer.on('connection', socket => {
  socket.on('message', message => console.log(message));
});

// `server` is a vanilla Node.js HTTP server, so use
// the same ws upgrade process described here:
// https://www.npmjs.com/package/ws#multiple-servers-sharing-a-single-https-server
const server = app.listen(3000);
server.on('upgrade', (request, socket, head) => {
  wsServer.handleUpgrade(request, socket, head, socket => {
    wsServer.emit('connection', socket, request);
  });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

不及他

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文