Node.js使用Socket.io实现跨域WebSocket即时通讯
作者:栖木时间:2026-10-31 07:58:29浏览:227
本文介绍如何使用Node.js结合Socket.io库实现跨域WebSocket即时通讯。通过封装原生WebSocket接口,解决浏览器兼容性问题,并提供服务端与客户端(Pad端、PC端)的完整代码示例,展示消息存储与双向通信的具体实现步骤。
Socket.io
原生WebSocket API的使用体验较为繁琐,因此本文选用Socket.io库。该库对WebSocket接口进行了良好封装,提供了更为简洁灵活的API,同时为不支持原生WebSocket的旧版浏览器提供了向下兼容方案。
- 服务端代码实现
- 根据客户端发送的不同消息,存储相应的对象数据。
- 首先需要通过npm安装依赖:npm i socket.io --save
- 前端需下载socket.io.js文件。
Node.js服务端核心代码
const socket = require("socket.io");
const http = require('http');
// 创建服务
const server = http.createServer((req,res)=>{
// 允许所有跨域请求
res.setHeader('Access-Control-Allow-Origin', '*');
req.writeHead(200,{'Content-Type':'text/html'})
res.end('')
}).listen(8001)
let pad = null,pc = null , padReady = false , pcReady = false;
// 连接socket.io
socket.listen(server).on('connection',(conn)=>{
conn.on('message',(str)=>{
if(str==="Pad"){
pad = conn;
padReady = true;
conn.send('连接成功');
}
if(str==="PC"){
pc = conn;
pcReady = true;
}
if(padReady&&pcReady){
if(str==='PC') str='我是PC界面'
pc.send(str);
}
})
conn.on("disconnection",(code, reason) => {
console.log("关闭连接")
});
})Pad端HTML界面代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.kuang {
text-align: center;
margin-top: 200px;
}
#mess {
text-align: center
}
.value {
width: 200px;
height: 200px;
border: 1px solid;
text-align: center;
line-height: 200px;
display: inline-block;
}
</style>
</head>
<body>
<div id="mess">正在连接...</div>
<div class="kuang">
<div class="value" id="value1">aaaaaaa</div>
<div class="value" id="value2">bbbbbbb</div>
<div class="value" id="value3">ccccccc</div>
</div>
<script src="./js/socket.io.js"></script>
<script>
// 跨域地址
const socket = io('192.168.1.115:8001')
socket.on('connect', () => {
// 连接成功
socket.send('Pad')
// 监听连接
socket.on('message', (msg) => {
document.getElementById('mess').innerHTML=msg
// console.log(msg)
})
// 关闭连接
socket.on('disconnect', () => {
})
})
document.querySelector(".kuang").onclick = (e)=> {
socket.send(e.target.innerHTML);
}
</script>
</body>
</html>PC端HTML界面代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.kuang {
text-align: center;
margin-top: 200px;
}
#mess {
text-align: center
}
</style>
</head>
<body>
<div id="mess"></div>
<script src="./js/socket.io.js"></script>
<script>
var mess = document.getElementById("mess");
// 跨域地址
// TODO: 这里注意一下 不能写127.0.0.1 或者localhost 不然其他客户端访问不到
const socket = io('192.168.1.115:8001')
socket.on('connect', () => {
// 连接成功
socket.send('PC')
// 监听连接
socket.on('message', (msg) => {
mess.innerHTML = msg
// console.log(msg)
})
// 关闭连接
socket.on('disconnect', () => {
})
})
</script>
</body>
</html>以上即为Node.js利用Socket.io实现跨域WebSocket即时通讯的完整流程。如需了解更多Node.js跨域WebSocket相关技术细节,建议查阅本站其他文章。
作者最新文章
NestJS 是什么?与 Express、Koa 的核心区别及选型建议
2026-11-05 13:46:41
生产环境升级 Node.js 的注意事项与兼容性测试策略
2026-11-05 09:19:24
nvm 常用命令详解:怎么平滑切换和升级 Node.js 版本
2026-11-04 09:02:34
JavaScript和JSP的根本区别:运行环境与执行机制解析
2026-11-03 23:30:18
使用nvm卸载指定版本Node.js并切换默认环境
2026-11-03 23:09:26
