WebSocket通过HTTP升级握手建立TCP上的持久双向通信,客户端用new WebSocket()连接并监听onopen/onmessage,服务端用ws库广播消息,需处理重连、心跳、鉴权等优化。

用 J*aScript 实现实时聊天应用,核心在于建立客户端与服务端之间的持久、双向通信通道——WebSocket 正是为此而生。它不像 HTTP 那样每次请求都要重新握手,而是建立一次连接后,双方可以随时互相发消息,延迟低、开销小。
WebSocket 协议在 TCP 之上,通过一次 HTTP 升级(Upgrade)握手完成连接建立。成功后,连接保持打开状态,客户端和服务端都能主动发送数据(文本或二进制),无需轮询或长连接模拟。
关键点:
HTML 中放一个输入框、一个发送按钮、一个消息列表容器:
立即学习“J*a免费学习笔记(深入)”;
<input id="msgInput" placeholder="输入消息"> <button id="sendBtn">发送</button> <div id="chatBox"></div>
J*aScript 初始化连接并处理交互:
情感家园企业站5.0 多语言多风格版
一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!
0
查看详情
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('已连接到聊天服务器');
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
const p = document.createElement('p');
p.textContent = `[${msg.user}]: ${msg.text}`;
docum
ent.getElementById('chatBox').appendChild(p);
document.getElementById('chatBox').scrollTop = document.getElementById('chatBox').scrollHeight;
};
ws.onerror = (err) => console.error('WebSocket 错误:', err);
ws.onclose = () => console.log('连接已关闭');
document.getElementById('sendBtn').onclick = () => {
const input = document.getElementById('msgInput');
const text = input.value.trim();
if (text && ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({ user: '游客', text }));
input.value = '';
}
};
安装依赖:npm install ws
创建 server.js:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
// 存储所有连接的客户端(简单场景可用数组,生产环境建议用 Map 或 Redis)
const clients = new Set();
wss.on('connection', (ws, req) => {
console.log('新用户连接');
clients.add(ws);
ws.on('message', (data) => {
try {
const msg = JSON.parse(data);
// 广播给所有客户端(包括自己),也可排除发送者
clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({
user: msg.user || '匿名',
text: msg.text || ''
}));
}
});
} catch (e) {
console.error('消息解析失败:', e);
}
});
ws.on('close', () => {
console.log('用户断开');
clients.delete(ws);
});
});
console.log('WebSocket 服务运行在 ws://localhost:8080');
运行:node server.js,前端即可连接。
原生 WebSocket 功能精简,实际项目中常需补充能力:
基本上就这些。WebSocket 本身不复杂,但容易忽略错误处理、连接状态管理和消息可靠性。从原生入手理解原理,再过渡到成熟方案,是稳妥的路径。
以上就是如何用J*aScript实现一个实时聊天应用_WebSocket如何建立双向通信?的详细内容,更多请关注其它相关文章!
# 多语言
# 南庄勒流网站建设
# 如何优化旅游的网站建设
# 宜昌百度seo服务
# 网站推广去哪里找
# 了解深圳网站优化推广
# 东莞移动seo网站优化代码
# 品牌整合营销推广策划
# 正规seo优化业务
# 飞鸟风度和黑帽seo
# 辽阳网站建设优化平台
# 加载
# 后端
# 如何实现
# 有何
# 使用它
# javascript
# 递归
# 如何用
# 客户端
# 服务端
# a
# 防火墙
# npm
# node
# json
# node.js
# 前端
# js
# html
# redis
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
三星M34录音变声问题_Samsung M34麦克风调整
《撕歌》会员开通方法
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
J*aScript与HTML元素交互:图片点击事件与链接处理教程
冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤
win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】
B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】
服装短视频如何起号推广?服装短视频起号推广有什么要求?
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入
Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型
抖音作品被限流怎么办 抖音内容优化与流量恢复方法
《广发易淘金》国债逆回购操作教程
高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法
c++中的const关键字用法大全_c++ const正确使用指南
厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项
汽水音乐在线入口 汽水音乐网页端官方页面快速打开
微信网页版在线登录 微信网页版在线使用入口
cad视图选项卡不见了怎么办_cad视图标签恢复显示方法
包子漫画在线观看入口 包子漫画网正版全集链接
《偃武》甘宁技能详解
sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
国际经济与贸易就业方向解析
易车网官网直达入口 易车网在线登录入口
Yandex世界探索 最新官方免登录入口全知道
mysql如何配置从库只读_mysql从库只读设置方法
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
百度网盘网页入口链接分享 百度网盘官网入口网页登录
J*a中导出MySQL表为SQL脚本的两种方法
海外搜索引擎推广效果怎么样,怎么分析效果!
店铺如何关联视频号推广?视频号推广有什么用?
ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程
淘口令快速解析技巧
手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧
泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口
创客贴登录页面入口 创客贴网页版最新网址链接
铁路12306官网入口 铁路12306中国铁路官网登录首页
qq邮箱格式填写示例 qq邮箱标准填写规范
Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】
动漫岛汉化官网网 动漫岛官方动漫汉化地址
如何在mysql中比较InnoDB和MyISAM区别
J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突
CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条
CSS过渡与滚动滚动事件结合应用_scroll与transition动画
以下哪一项是古代兵书三十六计中的计谋
Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法
FotoBalloon图片左右镜像教程
MySQL多重JOIN技巧:高效关联同一表获取多角色信息
鲨鱼剧场app金币获取方法
2025-12-20
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。