服务器端如何向客户端发送消息?WebSocket实时通信原理

服务器端向客户端发送消息是 Web 开发、即时通讯(IM)、物联网(IoT)等场景中的核心功能,实现方式取决于你的技术栈、实时性要求以及网络环境。

以下是几种主流的实现方案,按实时性从高到低排序:

SpringBoot系列-Websocket 实时聊天
加载中
SpringBoot系列-Websocket 实时聊天

WebSocket(推荐:全双工实时通信)

适用场景:聊天室、游戏、实时股票行情、协同编辑、即时通知。
特点:建立连接后,服务器和客户端可以互相主动发送消息,延迟极低。

后端示例 (Node.js + ws 库)

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
  console.log('客户端已连接');
  // 向特定客户端发送消息
  ws.send(JSON.stringify({ type: 'welcome', message: 'Hello Client!' }));
  // 监听客户端消息
  ws.on('message', (message) => {
    console.log('收到消息:', message);
    // 广播给所有连接者(包括自己)
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(JSON.stringify({ type: 'broadcast', data: message }));
      }
    });
  });
});

前端示例 (JavaScript)

const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
  console.log('连接已建立');
  ws.send(JSON.stringify({ type: 'login', userId: 123 }));
};
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到服务器消息:', data);
};
ws.onerror = (error) => {
  console.error('WebSocket 错误:', error);
};

Server-Sent Events (SSE)(单向实时推送)

适用场景:新闻推送、股票价格更新、日志监控(服务器→客户端单向)。

服务器端如何向客户端发送消息?WebSocket实时通信原理

特点:基于 HTTP,只需客户端发起一次请求,服务器即可持续推送数据,比 WebSocket 轻量,但客户端无法主动通过该通道发送数据。

后端示例 (Node.js + Express)

app.get('/stream', (req, res) => {
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  });
  // 定期发送消息
  const interval = setInterval(() => {
    const time = new Date().toISOString();
    res.write(`data: ${JSON.stringify({ time, message: 'Server time update' })}nn`);
  }, 1000);
  // 客户端断开时清理
  req.on('close', () => {
    clearInterval(interval);
  });
});

前端示例 (JavaScript)

const eventSource = new EventSource('/stream');
eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到 SSE 消息:', data);
};
eventSource.onerror = (error) => {
  console.error('SSE 错误:', error);
  eventSource.close();
};

HTTP 长轮询 (Long Polling)(兼容性好)

适用场景:不支持 WebSocket 的旧浏览器、防火墙严格限制的环境。
特点:客户端发起请求,服务器保持连接直到有新消息才响应,模拟实时效果,但开销较大。

后端示例 (Node.js)

const pendingRequests = [];
app.get('/poll', (req, res) => {
  // 将当前请求挂起
  pendingRequests.push(res);
  // 当有消息时,响应并移除请求
  const respond = (data) => {
    res.json(data);
    const index = pendingRequests.indexOf(res);

服务器端如何向客户端发送消息?WebSocket实时通信原理

if (index > -1) pendingRequests.splice(index, 1); }; // 设置超时,避免连接永远挂起 req.on('close', () => { const index = pendingRequests.indexOf(res); if (index > -1) pendingRequests.splice(index, 1); }); // 模拟:5秒后如果有新消息则响应 setTimeout(() => { if (pendingRequests.includes(res)) { respond({ message: 'New data!' }); } }, 5000); });

MQTT(物联网/移动优先)

适用场景:IoT 设备、移动 App、弱网环境。
特点:轻量级发布/订阅协议,节省带宽和电量。

后端示例 (Node.js + mqtt 库)

const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://broker.hivemq.com');
client.on('connect', () => {
  console.log('MQTT 连接成功');
  // 发布消息到主题 'news/update'
  client.publish('news/update', JSON.stringify({ title: 'Breaking News' }));
});

前端/客户端示例

client.subscribe('news/update');
client.on('message', (topic, message) => {
  console.log('收到 MQTT 消息:', message.toString());
});

轮询 (Short Polling)(最简单但效率最低)

适用场景:非实时、低频更新(如每 5 秒检查一次)。
特点:客户端定时发起 HTTP GET 请求,服务器返回最新数据。

// 前端
setInterval(async () => {
  const response = await fetch('/api/messages');
  const data = await response.json();
  console.log(data);
}, 5000);

方案对比与选择建议

特性 WebSocket SSE

服务器端如何向客户端发送消息?WebSocket实时通信原理

长轮询

MQTT短轮询
实时性
双向通信✅ 支持❌ 仅服务器→客户端❌ 仅客户端→服务器✅ 支持❌ 仅客户端→服务器
服务器开销中等
浏览器支持现代浏览器现代浏览器所有浏览器需库支持所有浏览器
防火墙友好一般✅ 好✅ 好一般✅ 好
适用场景聊天、游戏、协同新闻、股票、日志兼容旧系统IoT、移动 App简单状态检查

最佳实践建议

  1. 首选 WebSocket:如果需要双向、低延迟通信,WebSocket 是行业标准。
  2. 考虑降级:如果客户端可能不支持 WebSocket,可以使用 Socket.IO 等库自动降级到长轮询。
  3. 消息格式:始终使用 JSON 序列化消息,并定义清晰的消息结构(如 { type, payload, timestamp })。
  4. 心跳机制:在 WebSocket 和 SSE 中,实现心跳检测以处理断线重连。
  5. 安全性
    • 使用 wss:// (WebSocket Secure) 和 https://
    • 对消息进行身份验证和授权。
    • 防止 XSS 和注入攻击(尤其在前端解析消息时)。

根据你的具体需求选择合适的方案,如果需要进一步帮助(如具体框架集成),请提供更多信息!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/479607.html

(0)
服务器和客户端区别是什么,客户端和服务器通信原理
上一篇 2026年7月10日 10:21
服务器端如何给客户端发信息?服务端主动推送消息机制
下一篇 2026年7月10日 10:23

相关推荐

  • 福州公司网站建设怎么做?福州网站建设费用及流程详解

    福州公司网站建设的核心在于通过移动端适配、极速加载及本地化SEO策略,构建一个既能承载品牌专业形象,又能精准捕获福州本地及周边区域流量的数字化获客终端,在数字化浪潮席卷的今天,企业官网早已不再是简单的“网络名片”,而是24小时在线的销售顾问,对于福州的企业而言,如何在竞争激烈的互联网环境中脱颖而出,关键在于理解……

    2026年7月3日
    8700
  • 大模型的OCW评测是什么?大模型评测指标有哪些

    大模型的OCW评测是指Open-Ended Creative Writing(开放式创意写作)评测,它通过评估模型在缺乏明确约束条件下的叙事逻辑、情感深度及风格模仿能力,来衡量其高阶认知与创造力水平,什么是OCW评测及其核心逻辑传统的机器翻译或代码生成评测往往有标准答案,这句话翻译成英文是什么”或“这段Pyth……

    2026年6月21日
    2700
  • IE测试工具和性能测试工具哪个好?,怎么选

    对于需要兼容IE浏览器的项目,选择一款支持老旧内核的性能测试工具是保证测试覆盖度的关键,目前业内公认的解决方案主要集中在LoadRunner、JMeter以及基于云端的BrowserStack等工具上,它们在不同场景下各有侧重,为什么IE测试工具在2026年依然被需要?尽管微软已停止对IE的官方支持,但企业级遗……

    2026年7月30日
    500
  • 如何在服务器上生成CSR文件,SSL证书CSR文件怎么生成?

    服务器生成 CSR 文件指南什么是 CSR 文件?CSR (Certificate Signing Request),即证书签名请求文件,当你需要申请 SSL/TLS 证书时,必须通过服务器生成一个 CSR 文件并提交给证书颁发机构 (CA),CSR 包含了你的公钥以及关于你的组织、域名、国家等身份信息,准备工……

    2026年7月13日
    19900
  • 如果MySQL到MySQL数据迁移应该怎么做,如何实现?

    为什么需要MySQL到MySQL迁移MySQL到MySQL数据迁移,核心在于根据业务场景选择最合适的工具与流程,确保数据完整性和业务连续性,在实际运维中,你可能会遇到以下需要迁移的场景:升级数据库版本:从MySQL 5.7升级到MySQL 8.0,新旧版本不兼容,必须重新迁移数据,更换服务器:物理机迁移到云端……

    2026年8月18日
    1000
  • 什么是IoT平台基础版?,主要功能有哪些?

    对于物联网入门项目,IoT平台基础版是性价比最高的选择,它提供设备接入、数据存储和基础管理等核心功能,且大多数平台提供免费额度,非常适合初创企业和个人开发者低成本启动物联网项目,什么是IoT平台基础版?IoT平台基础版,是云服务商针对物联网入门场景推出的轻量级服务版本,它保留设备管理、数据采集、命令下发等核心能……

    2026年8月19日
    500
  • 大模型LoRA微调支持哪些模型?支持哪些大语言模型

    大模型LoRA微调目前主要支持基于Transformer架构的主流开源模型,包括Llama系列、Qwen系列、Baichuan系列、ChatGLM系列以及Stable Diffusion等视觉生成模型,其核心原理是通过冻结预训练权重,仅训练少量低秩适配参数,从而实现高效、低成本的专业领域定制,在2026年的AI……

    2026年6月17日
    3000
  • idc等保_等保问题

    IDC等保是企业将服务器托管在IDC机房时必须满足的网络安全等级保护要求,核心在于从物理环境、网络架构、管理制度等多个维度进行合规整改,并选择有资质的测评机构完成测评,最终获得等保测评报告,idc等保怎么过?从零开始的全流程拆解很多企业面对IDC等保时感到无从下手,实际上只要拆解成几个关键步骤,就能有条不紊地推……

    2026年8月12日
    900
  • iQOO平板AI大模型怎么用?iQOO平板AI功能有哪些

    iQOO平板搭载的AI大模型并非噱头,而是通过端侧算力实现离线隐私保护与高效多模态交互的核心生产力工具,适合追求极致性价比与高效办公体验的用户,iQOO平板AI大模型的核心能力解析端侧智能的隐私与安全优势在移动设备日益普及的今天,数据隐私成为用户最关心的议题之一,iQOO平板采用的AI大模型技术,主要侧重于端侧……

    2026年6月14日
    3600
  • 字节AI大模型测评哪个最强?2026最新AI大模型排行榜

    字节AI大模型在2026年的核心优势在于其极致的多模态理解能力与端侧部署的轻量化方案,对于追求低延迟交互和私有化数据安全的中小企业而言,它是目前性价比最高的选择之一,随着人工智能从“炫技”阶段走向“落地”阶段,企业和个人用户在选型时不再仅仅关注模型的参数量,而是更看重实际场景中的响应速度、成本控制以及数据隐私保……

    2026年6月12日
    4900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注