共计 2170 个字符,预计需要花费 6 分钟才能阅读完成。
原生 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> |
正文完
2019-08-06