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 】
相关推荐:
《下一站江湖2》大雪山加入方法
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
《爱笔思画x》魔棒工具抠图教程
支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法
英雄联盟争者留名活动介绍
获取WooCommerce产品在后台编辑页面的分类ID
iPhone14开启Apple TV遥控设置
如何在CSS中使用伪类选择器_hover实现悬停效果
PHP页面重载后变量状态保持:实现用户档案连续浏览的教程
J*aScript大数运算_BigInt使用指南
《杖剑传说》食谱大全
iphone16系列配置参数介绍
掌握Go App Engine项目结构与GOPATH:包管理与导入实践
《波斯王子:失落的王冠》剑术大师打法攻略
小红书如何引流到私信?引流到私信有用吗?
使用Google服务账号实现Google Drive API无缝集成与文件访问
《桃源记2》资源采集攻略
《花瓣》创建专辑方法
如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计
以下哪一个是适应长期护理制度发展而设立的新职业
iCloud官方网站 iCloud网页版在线登录入口
Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改
Eclipse开发J*a快速入门
企查查官网和爱企查 企查查企业查询官网入口
《随手记》备份数据方法
Git命令与VS Code UI操作的对应关系解析
OpenWeatherMap API:通过城市名称获取天气预报数据指南
Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】
《U校园》学生登录入口2025
word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法
TikTok视频播放不流畅怎么办 TikTok视频播放优化方法
快手网页版官方访问 快手网页版页面在线打开
iSpring三分屏制作教程
如何在mysql中比较InnoDB和MyISAM区别
PHP与SQL实践:高效实现数据复制与特定列值修改
php如何实现多域名共享session_php存储session到redis与跨域读取配置
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化
iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程
邦丰播放器频道搜索设置
mysql中如何配置字符集和排序规则_mysql字符集排序配置
CSS如何使用outline-offset与颜色组合突出元素边框
Dagster资产间数据传递与用户配置管理教程
AO3永久镜像入口开放_AO3最新网址兼容所有浏览器
Excel宏怎么删除_Excel中删除宏的详细操作流程
J*aScript:从子元素中批量移除特定CSS类
斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来
解决CSS布局中意外顶部空白问题的教程
《edge浏览器》关闭翻译功能方法
c++中的const关键字用法大全_c++ const正确使用指南
2025-12-20
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。