持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
介绍:
WebSocket 是基于TCP传输协议,服用http的握手通道
一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实现了“真·长链接”,实时性优势明显
使用ws
yarn add ws
yarn add @types/ws //使用typescript的别忘了安装ts的类型定义
ws写在一个单独的文件里 /webSockert/sockert.ts
import WebSocket from "ws"; //引入ws
const wss = new WebSocket.Server({port:3000}) //实例化
type paramtype = {
send:Function,
}
let param:paramtype
wss.on('connection',function(ws,req){
param=ws
ws.on('message',function(msg){
console.log(msg);
})
})
export default function getMessage(data:object) { //暴露出去
param.send(JSON.stringify(data))
}
然后在需要监听的接口中使用这个方法
import getMessage from '../../webSocket/Scocket'
@Controller("auth")
export default class testController {
@post("websocket")
public async add(ctx: Koa.Context) {
getMessage(ctx.request.body)
ctx.body="成功"
}
}
我这边封装了一个路由装饰器,自动注册路由
其他小伙伴可以这样写
import getMessage from '../../webSocket/Scocket'
router.post('/auth/websocket',async (ctx)=>{
getMessage(ctx.request.body)
ctx.body={
start:1,
data:'成功'
}
})
\
前端部分
对于命令行不太熟悉的小伙伴建议使用vue ui去创建项目
cmd 中输入 vue ui
在左上角点击vue任务管理器
选择创建
这里可以修改创建路径哦
这个demo我是不打算用git的所以初始化git创建就没勾选,包管理器个人比较喜欢用yran
根据自己需求我这边选择手动
这里可以保存预设,下次可以直接使用,我这里就不保存直接创建了,等待一会儿去尿个尿,就创建完了
一分钟后。。。。ok项目创建好了,让我们来开写吧
其他代码就不做展示了
onMounted(() => {
const ws = new WebSocket('ws://localhost:3001') //连接ws
ws.onmessage = (evt) => {
console.log(evt.data) //传过来的数据
}
ws.onopen = () => {
console.log('连接成功')
}
ws.onerror = () => {
console.log('连接错误')
}
ws.onclose = () => {
console.log('连接关闭')
}
})
测试
让我们在apifox上请求一下/auth/websocket
页面上会打印出