原生WebSocket API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。
- 服务端代码
- 根据不同客户端传来的消息存储一下 不同的对象
- 需要安装 npm i socket.io –save
- 下载 socket.io.js
- nodejs 代码
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>