红宝书第四十八讲:实时通信双雄:Socket.IO Meteor 的奇妙旅程
红宝书第四十八讲:实时通信双雄:Socket.IO & Meteor 的奇妙旅程
资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲
一、实时通信基础
1. WebSocket与HTTP对比
传统HTTP请求类似送信(短暂连接),而WebSocket是持续通话(长连接双向通信)1:
WebSocket核心优势 1:
- 双向通信(客户端与服务端均可主动推送消息)
- 低延迟(适合聊天、实时游戏、股票行情)
二、Socket.IO基础
1. 封装WebSocket的增强库
Socket.IO在WebSocket基础上添加了自动重连、断线检测、房间管理等功能1。
代码示例(基本通信) [参考资料1双向通信逻辑]:
// 服务端(Node.js)
const io = require('socket.io')(3000);
io.on('connection', (socket) => {socket.emit('welcome', '欢迎加入聊天室'); // 主动推送消息到客户端socket.on('message', (data) => {console.log('收到消息:', data);});
});// 客户端(浏览器)
<script src="/socket.io/socket.io.js"></script>
<script>const socket = io('http://localhost:3000');socket.on('welcome', (msg) => {console.log(msg); // 输出:欢迎加入聊天室});socket.emit('message', '你好!'); // 发送消息到服务端
</script>
三、Meteor框架特性
1. 同构代码与实时数据同步 2
Meteor允许客户端与服务器共享代码,数据库变化实时推送到前端。
数据流示意图 [基于资料6描述]:
关键特点:
- 实时推送:无需手动刷新页面,数据变更即时同步2
- 统一语言:使用JavaScript全栈开发(前端 + 后端 + 数据库)
示例:实时数据订阅:
// 服务端发布数据
Meteor.publish('tasks', function() {return Tasks.find(); // 返回MongoDB查询
});// 客户端订阅并监听变化
Meteor.subscribe('tasks');
Tracker.autorun(() => {const tasks = Tasks.find().fetch(); // 数据更新时自动触发console.log('最新任务:', tasks);
});
四、实时通信核心:服务器与客户端的即时传话筒
典型场景:
聊天室、股票行情实时更新、多人协同文档编辑
五、Socket.IO:智能网络快递员
1. 核心原理 13
- 断线自动重连(网络波动也不怕)
- 双工对话模式(就像对讲机)
- 兼容多种协议(WebSocket优先,自动降级为轮询)
2. 代码实战:简易聊天室
// 🖥️ 服务器端(Node.js)
const io = require('socket.io')(3000);io.on('connection', socket => {socket.on('chat message', msg => {io.emit('chat message', msg); // 📢 广播消息给所有人});
});// 💻 客户端(浏览器)
const socket = io('http://localhost:3000');
document.querySelector('button').onclick = () => {socket.emit('chat message', input.value);
};
socket.on('chat message', msg => {console.log('收到消息:', msg);
});
3. 通信流程图
六、Meteor:全栈开发火箭筒
1. 核心特征
- 数据库实时同步 (数据变更 → 全平台自动更新)
- 前后端同语言 (全JavaScript开发)
- 热更新 (代码修改立即生效)
2. 实战示例:实时待办列表
// 📦 定义数据模型
Todos = new Mongo.Collection('todos');if (Meteor.isClient) {Template.todos.helpers({items: () => Todos.find() // ↔️ 自动同步数据});// 📝 添加新事项Template.body.events({'submit .new-todo': e => {Todos.insert({ text: e.target.text.value });}});
}
3. 数据同步机制图
七、功能对比指南
特性 | Socket.IO(快递员模式) | Meteor(航天中心模式) |
---|---|---|
开发类型 | 侧重实时双向通信 | 全栈开发框架(含数据库、前端模板) |
学习曲线 | 较低(专注网络层) | 较陡峭(需要全栈思维) |
自动同步 | 需要手动同步数据 | 内置实时数据库(DDP协议) |
适用场景 | 需自定义实时模块的项目 | 快速构建实时Web应用 |
移动端支持 | 需要额外适配 | 原生支持移动开发 |
八、技术选型对比
技术 | 适用场景 | 核心差异 |
---|---|---|
Socket.IO | 需自定义通信逻辑(如聊天室) | 基于WebSocket的增强库,灵活但需手动管理数据流1 |
Meteor | 需要快速开发全栈实时应用 | 内置实时数据同步,开箱即用但框架较重2 |
九、开发技巧指南
// Socket.IO房间功能(私密群聊示例)
io.on('connection', socket => {socket.join('vip-room'); // 🚪 加入VIP房间socket.to('vip-room').emit('私密消息');
});// Meteor权限控制(重要!)
Todos.allow({insert: userId => verifyVIP(userId) // 🔒 验证用户权限
});
典型应用场景:
- Socket.IO:在线客服系统、实时游戏计分板
- Meteor:项目管理面板、实时协作工具
目录:总目录
上篇文章:红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南
下篇文章:红宝书第四十九讲:XSS/CSRF攻击防御策略解析
脚注
《JavaScript高级程序设计(第5版)》阐述了WebSocket的双向通信机制与EventSource的区别 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
《JavaScript高级程序设计(第5版)》指出Meteor的同构特性与实时数据更新协议 ↩︎ ↩︎ ↩︎
《JavaScript高级程序设计(第5版)》Socket.IO 建立在 WebSocket 基础上并添加自动降级支持 ↩︎
相关文章:
红宝书第四十八讲:实时通信双雄:Socket.IO Meteor 的奇妙旅程
红宝书第四十八讲:实时通信双雄:Socket.IO & Meteor 的奇妙旅程 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、实时通信基础 1. WebSocket与HTTP对比 传统HTTP请求类似送信&…...
【数字图像处理】图像分割(1)
图像分割定义 把图像分成若干个特定的、具有独特性质的区域,并提出感兴趣目标的技术和过程 图像分割概述 一幅图像通常是由代表物体的图案与背景组成,简称物体与背景 图像分割的本质:将图像按照区域内的一致性和区域间的不一致性进行分类的过…...
VFlash的自动化和自定义动作
文章目录 一、automation 自动化二、custom actions 自定义动作常用方法如何选择要发送的诊断请求CustomActionValueList 作用Pre Action和Post Action之间交换信息 提示:如何打印软件中变量报错:无法打开源文件 Windows.h stdio.h conio.h报错ÿ…...
pytorch学习02
自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度,具有自动求导功能。自动微分模块是构成神经网络训练的必要模块,可以实现网络权重参数的更新,使得反向传播算法的实现变得简单而高效。 1. 基础概念 张量 Torch中一切皆为张…...
TV板卡维修技术【四】
【一】热成像松香的结合快速定位短路位置 发现电路短路,但是无法定位到大概位置,可以采用烧机法: 热成像大致定位,松香准确定位: 可以很快找到这种小陶瓷电容短路的故障: 测量电路是否有大短路,…...
Rust生命周期、文件与IO
文章目录 Rust生命周期生命周期注释结构体如何使用字符串静态生命周期 Rust文件与IO接收命令行参数命令行输入文件读取文件写入 Rust生命周期 终于讲到Rust最重要的机制之一了,生命周期机制 我们先复习一下垂悬引用 {let r;{let x 5;r &x;}println!("…...
22、字节与字符的概念以及二者有什么区别?
1、概念 字节(byte) 定义:字节是计算机信息技术中用于计量存储容量和传输容量的一种单位,通常由8个二进制位(bit)组成。 作用:字节是计算机存储和处理信息的基本单位,用于衡量数据…...
APP端测试
一、功能测试 1. 核心测试点 安装/卸载/升级:验证不同安装方式(应用商店/APK/IPA) 注册登录:多种登录方式测试(手机号、第三方账号) 核心业务流程:支付流程、内容发布等关键路径 中断测试&a…...
Langchain-构建向量数据库和检索器
向量数据库安装 pip install langchain-chroma 文档》向量存储》向量数据库。 和0416 提示词工程相同。 初始化 import osfrom langchain_chroma import Chroma from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.documents im…...
PPT无法编辑怎么办?原因及解决方法全解析
在日常办公中,我们经常会遇到需要编辑PPT的情况。然而,有时我们会发现PPT文件无法编辑,这可能由多种原因引起。今天我们来看看PPT无法编辑的几种常见原因,并提供实用的解决方法,帮助你轻松应对。 原因1:文…...
PH热榜 | 2025-04-17
1. Mailgo 标语:一款利用人工智能的冷邮件平台,能够提升邮件送达率。 介绍:Mailgo将AI线索寻找助手、智能日程安排和预热账户集成到一个直观的平台上——帮助销售团队和创业者高效到达客户邮箱,轻松扩展业务,并加快转…...
maptalks矩形绘制结束后,获取最大经度最大纬度,最小经度最小纬度,从左上角开始依次获取并展示坐标
maptalks矩形绘制结束后,获取最大经度最大纬度,最小经度最小纬度,从左上角开始依次获取并展示坐标 重点 // 获取绘制的矩形图形对象const rectangle param.geometry;// 获取矩形外接矩形范围(西南角/东北角坐标)cons…...
网页图像优化:现代格式与响应式技巧
网页图像优化:现代格式与响应式技巧 网页图像如果处理不好,很容易拖慢加载速度,影响用户体验。这篇文章聊聊怎么用现代图像格式和响应式技巧,让你的网站图片加载更快、效果更好。 推荐的图像格式 选对图像格式,能在保…...
python中参数前**的含义
在Python中,参数前的 ** 表示该参数是一个“关键字参数”或者说是“可变关键字参数”。这种参数允许函数接受任意数量的关键字参数,并将这些参数存储在一个名为**kwargs的字典中。这使得函数可以接收任意数量的键值对参数,这在编写需要处理多…...
内存编码手册:整数与浮点数的二进制世界
1.整数在内存中的存储 之前在学习操作符的博文中,我们就已经学习了整数在内存中存储的一些基本知识,我们来快速回忆一下,并开始学习新的知识。 之前的学习中,我们知道整数的二进制表示方法有三种,即原码,…...
铷元素的市场供需情况如何?
铷元素的市场供需格局呈现出显著的稀缺性与战略价值,其供应高度依赖锂矿开采的副产品,而需求则随着高科技产业的快速发展持续攀升。以下从供应、需求、价格、政策及可持续性五个维度展开分析: 一、供应端:资源稀缺与技术瓶颈并存…...
MATLAB 程序实现了一个层次化光网络的数据传输模拟系统
% 主程序 num_pods = 4; % Pod 数量 num_racks_per_pod = 4; % 每个 Pod 的 Rack 数量 num_nodes_per_rack = 4; % 每个 Rack 的 Node 数量 max_wavelength = 50; % 可用波长数(根据冲突图动态调整) num_packets = 1000; % 模拟的…...
LFI to RCE
LFI不止可以来读取文件,还能用来RCE 在多道CTF题目中都有LFItoRCE的非预期解,下面总结一下LFI的利用姿势 1. /proc/self/environ 利用 条件:目标能读取 /proc/self/environ,并且网页中存在LFI点 利用方式: 修改请…...
QT6 源(34):随机数生成器类 QRandomGenerator 的源码阅读
(1)代码来自 qrandom.h ,结合官方的注释: #ifndef QRANDOM_H #define QRANDOM_H#include <QtCore/qalgorithms.h> #include <algorithm> // for std::generate #include <random> // for std::mt1993…...
极狐GitLab GEO 功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Geo (PREMIUM SELF) Geo 是广泛分布的开发团队的解决方案,可作为灾难恢复策略的一部分提供热备份。Geo 不是 开箱…...
快速上手,OceanBase + MCP + LLM,搭建 AI 应用
在 AI 技术发展的进程中,大语言模型(LLM)凭借卓越的信息处理与推理能力广受重视。然而,数据孤岛问题仍是 LLM 面临的核心挑战。目前,LLM 的推理主要依赖于预先训练的数据和有限的上下文窗口,既无法动态访问…...
【Python爬虫基础篇】--1.基础概念
目录 1.爬虫--定义 2.爬虫--组成 3.爬虫--URL 1.爬虫--定义 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展,万维网成为大量信息的载体…...
Linux :进程替换
进程替换 (一)进程程序替换1.替换原理2.替换函数exec函数命名理解 (二)实现简易shell (一)进程程序替换 1.替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往…...
XC7K410T‑2FFG900I 赛灵思XilinxFPGA Kintex‑7
XC7K410T‑2FFG900I Xilinx 赛灵思FPGA Kintex‑7 系列定位:Kintex‑7 中端,高性价比与高性能平衡 工艺节点:28 nm HPL(High‑Performance, Low‑Power)HKMG(High‑κ Metal Gate) 逻辑资源&…...
list容器介绍及模拟实现和与vector比较
目录 list容器介绍 lisy接口 list迭代器的注意事项 迭代器失效 list的模拟实现 list的节点 list的迭代器实现 list的接口实现 vector和list的优缺点 vector优点: vector缺点: list优点: list缺点: 总结: …...
[图论]Prim
Prim 本质:BFS贪心,对点进行操作。与最短路Dijkstra算法是“孪生兄弟”。存储结构:链式前向星适用对象:可为负权图,可求最大生成树核心思想:最近的邻接点一定在最小生成树(MST)上,对点的最近邻…...
【python】pysharm常用快捷键使用-(1)
*1.格式化代码【Ctrl Alt L】 写代码的时候会有很多黄色的波浪号(如图)又叫蚂蚁线,可以点击任意黄色波浪号的代码,然后按下【Ctrl Alt L】进行代码格式化。 2.添加函数功能和参数注释 添加函数文档字符串 docstring 在函数…...
06-DevOps-自动构建Docker镜像
前面已经完成了jar文件的打包和发布,但在实际使用时,可能会遇到外部依赖环境发生改变,为了解决这些问题,更多的做法是把应用程序以docker镜像,生成容器的方式运行,这是一种标准化的方式。 创建Dockerfile文…...
案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.2 技术决策民主化-5.2.2技术选型的量化评估矩阵
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 案例驱动的 IT 团队管理:创新与突破之路 - 第五章 创新管理:从机制设计到文化养成 - 5.2 技术决策民主化5.2.2 技术选型的量化评估矩阵一、技术选型的…...
力扣面试150题--有效的字母异位词和字母异位词分组
Day 24 题目描述 思路 初次思路:如果两个字符串为异位词,说明它们长度相同并且字母出现的次数相同,于是有以下做法: 定义一个map,来保存s中每个字符的出现次数处理特殊情况,如果长度不同,直接…...
WSL2-Ubuntu22.04安装URSim5.21.3
WSL2-Ubuntu22.04安装URSim5.21.3 准备安装启动 准备 名称版本WSL2Ubuntu22.04URSim5.21.3VcXsrvNaN WSL2安装与可视化请见这篇:WSL2-Ubuntu22.04-配置。 安装 我们是wsl2-ubuntu22.04,所以安装Linux版本的URSim,下载之前需要注册一下,即…...
配合 Spring Bean 注入,把 Function 管理起来?
大家好呀!今天我们来聊聊一个特别有意思的话题 - 如何在Spring中优雅地管理和注入Function对象。就像把各种调料整齐地摆在厨房里一样,我们要把各种函数方法也管理得井井有条!🍳 一、为什么要把Function管起来?&#…...
Wireshark TS | 异常 ACK 数据包处理
问题背景 来自于学习群里群友讨论的一个数据包跟踪文件,在其中涉及到两处数据包异常现象,而产生这些现象的实际原因是数据包乱序。由于这两处数据包异常,都有点特别,本篇也就其中一个异常现象单独展开说明。 问题信息 数据包跟…...
vue3 el-dialog新增弹窗,不希望一进去就校验名称没有填写
就是在进入弹窗时、点击关闭/取消按钮时等情况清空该表单校验,在失去焦点或者点击确定/提交按钮的时候再去校验。这里默认已经写好了在失去焦点或者点击确定/提交按钮的时候的校验逻辑。 解决步骤: 一、定义清空表单校验方法 // 清空表单校验const cle…...
【2-12】CRC循环冗余校验码
前言 前面我们介绍了纠错码——海明码,同时还说明了为什么现代网络常用检错重传而不是纠错,本文介绍CRC循环冗余校验码。 文章目录 前言1. 简单定义2. 生成规则3. 例题3.1 例13.2 例2 后记修改记录 1. 简单定义 CRC(Cyclic Redundancy Chec…...
多 Agent 协作怎么整:从谷歌A2A到多Agent交互方案实现
写在前面:多 Agent 协作模式 大型语言模型(LLM)的浪潮之下,能够自主理解、规划并执行任务的 AI Agent(智能体)正成为人工智能领域最炙手可热的焦点。我们惊叹于单个 Agent 展现出的强大能力,但当面对日益复杂的现实世界任务时,单个 Agent 的局限性也逐渐显现。 正如人…...
内部聊天软件,BeeWorks-安全的企业内部通讯软件
企业在享受数据便利的同时,如何保障企业数据安全已经成为无法回避的重要课题。BeeWorks作为一款专为企业设计的内部通讯软件,通过全链路的安全能力升维,为企业提供了一个安全、高效、便捷的沟通协作平台,全面保障企业数据安全。 …...
健康养生:开启活力生活的密钥
当我们在健身房看到年逾六旬却身形矫健的老人,在公园偶遇精神矍铄、步伐轻快的长者,总会惊叹于他们的健康状态。其实,这些都得益于长期坚持科学的养生之道。健康养生并非遥不可及的玄学,而是融入生活细节的智慧。 在饮食的世界…...
士兵乱斗(贪心)
问题 B: 士兵乱斗 - USCOJ...
Android 不插SIM卡,手机不能拨打紧急电话;2g+gsm配置才支持112紧急拨号
[DESCRIPTION] 不插SIM卡,手机不能拨打紧急电话 Root Cause 手机没有写入合法的IMEI;或者当地的某个运营商不支持紧急电话,而手机正好选上了这个运营商;或者当地的某个运营商不支持无SIM卡的紧急电话,而手机正好选上了这个运营商 [SOLUTION] …...
Freertos----信号量
一、信号量的特性: 生产者为任务A、B,消费者为任务C、D一开始信号量的计数值为0,如果任务C、D想获得信号量,会有两种结果: 阻塞:买不到东西咱就等等吧,可以定个闹钟(超时时间)即刻返回失败&…...
AI 数字短视频数字人源码开发的多元价值与深远意义
在短视频行业竞争日益激烈的当下,AI 数字短视频数字人源码开发正以颠覆性的姿态,为行业带来诸多前所未有的优势,从创作、传播到商业变现等环节,全面重塑短视频生态。 创新创作模式,激发无限创意 传统短视频创作受…...
Apifox下载安装与使用
一、Apifox下载 官网地址:Apifox 点击"免费下载",即可进行下载。 二、Apifox安装 双击安装文件即可安装。...
命令行参数解析 - argparse 模块
1、简介 argparse 模块是 Python 标准库中提供的一个 命令行解析模块 ,它可以让使用者以类似 Unix/Linux 命令参数的方式输入参数(在终端以命令行的方式指定参数),argparse 会自动将命令行指定的参数解析为 Python 变量ÿ…...
【Android】 如何将 APK 内置为系统应用(适用于编辑设置属性)
如何将 APK 内置为系统应用(适用于编辑设置属性) 在 Android 中,将 APK 文件内置为系统应用涉及到一系列的命令和步骤。以下是详细的操作流程,帮助您解决常见问题,如 /system not in /proc/mounts 的错误。 挂载system/app获取可读写权限 …...
随手笔记-python-opencv 读取图像的顺序 与pytorch处理图像的顺序
import cv2# 读取图像 image_path path/to/your/image.jpg # 替换为你的图像路径 image cv2.imread(image_path)# 检查图像是否成功读取 if image is None:print("Error: Unable to load image.") else:print("Image loaded successfully.") 1、OpenCV…...
996引擎-实战笔记:Lua 的 NPC 面板获取 Input 内容
996引擎-实战笔记:Lua 的 NPC 面板获取 Input 内容 获取 Input 内容测试NPC参考资料获取 Input 内容 测试NPC -- NPC入口函数 function main(player)local msg = [[<Img|id=9527|x=0|y=0|width=300|height=150|img=public/bg_npc_01.png|bg=1|move=1|reset=1|show=0|layer…...
少数服从多数悖论、黑白颠倒与众人孤立现象之如何应对(一)
观己之前,也可先观众生 如果当时没有袖手旁观,或许唇不亡齿也不会寒 ■如何轻松/更好应对个别被众人孤立(他人、辨别、自己) ●他人被孤立 不参与 有余力,助弱者 被孤立者本身有问题 •不参与:不会辨…...
大模型在急性单纯性阑尾炎预测及治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究方法与创新点 二、急性单纯性阑尾炎概述 2.1 定义与发病机制 2.2 临床表现 2.3 传统诊断方法 三、大模型在急性单纯性阑尾炎预测中的应用 3.1 大模型简介 3.2 数据收集与处理 3.3 模型训练与优化 3.4 预测…...
科研新触角:松灵六轴臂重构具身智能生态
在具身智能(Embodied AI)从实验室走向产业化的进程中,硬件性能与场景适配性成为技术落地的核心瓶颈。松灵机器人推出的全自研科研级轻量六轴机械臂PiPER,以“轻量化设计毫米级精度跨平台兼容”三大技术突破,重新定义了…...