1. webSocket简介
webSocket在开始的时候依旧使用的是http协议,只不过后面保持tcp持久链接,是一种全双工通信。webSockets和http很像,它的请求url用的是ws、wss,对应http、https
2. 步骤
- 初始化
npm init -y - 安装ws依赖
npm i --save ws - 写服务器代码
const WebSocket = require('ws');
const wss = new WebSocket.Server({port:3000});
wss.on('connection',ws => {
console.log("进来访问了");
ws.on("close",() => {
console.log("走了,出去了");
})
})
- 服务器启动
node server.js - 配置前端代码,即告诉浏览器这个请求不要走http://localhost:3000而是走ws://localhost:3000
<script>
const ws = new WebSocket('ws://localhost:3000');
ws.addEventListener('open',() => {
console.log("连接上ws服务器了");
})
</script>
-
此时只要打开前端页面,服务器端的终端命令行中就会有提示信息了 -
数据传输功能实现
const WebSocket = require('ws');
const wss = new WebSocket.Server({port:3000});
wss.on('connection',ws => {
console.log("进来访问了");
ws.on('message',data => {
ws.send(data + '举头望明月,低头思故乡')
})
ws.on("close",() => {
console.log("走了,出去了");
})
})
// 【index.html】--- 前端代码
<script>
const ws = new WebSocket('ws://localhost:3000');
ws.addEventListener('open',() => {
console.log("连接上ws服务器了");
ws.send('白日依山尽,黄河入海流')
})
ws.addEventListener('message',({data}) => {
console.log(data);
})
</script>
- 执行时,需要重启服务器
index.html也需要在服务器环境下执行,推荐用live server插件
3. Socket.io
-
Socket.io有用到WebSockets协议,对于不支持WebScoket的浏览器会回退到http轮询。而且提供自动重连,是一个更高级的库 -
用Socket.io实现一个实时聊天应用 -
项目初始化 npm init -y -
安装express 和 socket.io依赖 npm i express socket.io -
服务器代码
const express = require('express');
const app = express();
const server = require('http').createServer(app)
const { Server } = require('socket.io');
const io = new Server(server);
app.get('/',(req,res) =>{
res.sendFile(__dirname+'/index.html');
})
io.on('connection',socket => {
console.log("有位美女进入了聊天室");
socket.on("chat message",msg =>{
console.log(msg);
io.emit('chat message',msg)
})
socket.on('disconnect',() => {
console.log("美女离开了");
})
})
server.listen(3001, () => {
console.log('服务器已开启');
})
- 客户端代码
<body>
<form>
<input type="text">
<button>发送</button>
</form>
<ul></ul>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
const form = document.querySelector('form');
const input = document.querySelector('input');
const ul = document.querySelector('ul')
form.addEventListener('submit',e=>{
e.preventDefault()
if(input.value){
socket.emit('chat message',input.value);
input.value = '';
}
})
socket.on('chat message',msg=>{
const li = document.createElement('li')
ul.appendChild(li)
})
</script>
</body>
-
重启服务器端代码node server.js , -
在浏览器运行前端代码 浏览器输入网址 localhost:3001(这个端口号具体看server.js中使用的端口号,保持一致即可)
|