当前位置: 首页 > news >正文

如何搭建一个 websocket

环境:

  • NodeJs
  • socket.io 4.7.2

安装依赖

yarn add socket.io

创建服务器

引入文件

特别注意: 涉及到 colors 的代码,请采取 console.log() 打印

// 基础老三样
import http from "http";
import fs from "fs";
import { Server } from "socket.io";// 下面2个是我本地开发的,你们可能没有
import colors from "colors-console";
import constant_color from "./colors.js";

createServer

请在当前目录下创建 index.html 文件。【客户端需要连接 socket.io】

<script src="/socket.io/socket.io.js"></script><script>constsocket = io();
</script>

服务端代码:

const server = http.createServer((req, res) => {fs.readFile("./index.html", "utf-8", (err, data) => {if (err) {res.writeHead(500, "utf-8", e);res.end();}res.writeHead(200, {"Content-Type": "text/html"});res.end(data, "utf-8");});
});

websocket

简单判断客户端是否连接,断开。

const io = new Server(server);io.on("connection", socket => {console.succ("User connected.");// 用户断开连接socket.on("disconnect", () => {console.err("User disconnected.");})
});server.listen(3000, "127.0.0.1");

启动服务器

yarn app

在这里插入图片描述

附录

再次提醒: 请去除所有 console.err console.succ colors 等有关颜色内容
在这里插入图片描述
项目结构:【它们都是同级目录,最顶层】

D:.
│  app.js
│  colors.js
│  index.html
│  package.json
│  yarn.lock
│
└─node_modules

app.js 代码:

import http from "http";
import fs from "fs";
import { Server } from "socket.io";
import colors from "colors-console";
import constant_color from "./colors.js";// 重写 console.err 
console.err = (...msg) => {let str = "";for (let i = 0; i < msg.length; i++) {str += msg[i] + " ";}console.log(colors(constant_color.red, str));
}// 定义 console.succ
console.succ = (...msg) => {let str = "";for (let i = 0; i < msg.length; i++) {str += msg[i] + " ";}console.log(colors(constant_color.green, str));
}const server = http.createServer((req, res) => {fs.readFile("./index.html", "utf-8", (err, data) => {if (err) {res.writeHead(500, "utf-8", e);res.end();}res.writeHead(200, {"Content-Type": "text/html"});res.end(data, "utf-8");});
});const io = new Server(server);io.on("connection", socket => {console.succ("User connected.");// 用户断开连接socket.on("disconnect", () => {console.err("User disconnected.");})
});server.listen(3000, "127.0.0.1");console.log("Server running at \x1B[36m\x1B[4mhttp://127.0.0.1:3000\x1B[0m");

index.html 代码:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="/socket.io/socket.io.js"></script>
</head><body><h1>Hello Friend! 😀</h1><script>const socket = io();</script>
</body></html>
http://www.lryc.cn/news/184948.html

相关文章:

  • pip常用命令
  • [QT编程系列-43]: Windows + QT软件内存泄露的检测方法
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-5】处理输入-思维链推理
  • java Spring Boot RequestHeader设置请求头,当请求头中没有Authorization 直接400问题解决
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入
  • 双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型
  • 8月份,誉天79名学员通过HCIE认证!
  • Quarto 入门教程 (2):如何使用并编译出不同文档
  • 【C++设计模式之命令模式:行为型】分析及示例
  • 二、Excel VBA 简单使用
  • 获取url后面的参数
  • python入门篇07-数据容器(序列 集合 字典,json初识)基础(下)
  • 阿里云服务器公网带宽价格表“按固定带宽”计费模式
  • MTK的充电方案—PMIC充电
  • 【Overload游戏引擎分析】画场景栅格的Shader分析
  • 智能化物流管理:全国快递物流查询API的角色与优势
  • Spring Boot如何配置CORS支持
  • Mybatis 拦截器(Mybatis插件原理)
  • AXI总线协议基础--几分钟熟悉通道信号和基础架构
  • matlab数学建模方法与实践 笔记汇总
  • [UE虚幻引擎] DTCopyFile 插件说明 – 使用蓝图拷贝复制文件 (Windows)
  • 如何用ChatGPT学或教英文?5个使用ChatGPT的应用场景!
  • 基于spirngboot人事考勤管理信息系统
  • QT界面窗口 (widget)的显示和隐藏,关闭
  • 这7个AI软件让设计效率飞起,快来收藏 优漫动游
  • ElasticSearch环境准备
  • JAVA练习百题之数组插入元素
  • C++11常见语法
  • 【数据分析】时间序列
  • 【图像算法相关知识点】