Vue3+WebSocket 实时聊天框架

WebSocket前端搭建

封装WebSocket基本框架。必备监听器值open、close、error、message。在页面调用封装好的WebSocket。

作用

open

连接websocket时触发

close

关闭websocke时触发

error

发生错误时触发

message

接收消息时触发

封装WebSocket代码实例:

function useWebSocket(handleMessage){
   //连接ws服务器的地址
   const ws = new WebSocket('ws://localhost:3000')

   const init = () =>{
      bindEvent()
   }

   function bindEvent(){
      //监听
      ws.addEventListener('open',handleOpen, false)
      ws.addEventListener('close',handleClose, false)
      ws.addEventListener('error',handleError, false)
      ws.addEventListener('message',handleMessage, false)
   }

   function handleOpen(e){
      console.log('WebSocket open',e)
   }
   function handleClose(e){
      console.log('WebSocket close',e)
   }
   function handleError(e){
      console.log('WebSocket error',e)
   }
   init()
   //返回WebSocket实例
   return ws
}
export default useWebSocket

send()为发送函数。handleMessage就是处理封装中的'message'监听,当收到消息时触发:

import useWebSocket from '../hook'
data(){
      return{
           ws : useWebSocket(this.handleMessage)
      }
 },
methods:{
    sendmsg(){
        //调用WebSocket的发送函数
        this.ws.send(/*string*/)
     },
     handleMessage(e){
       console.log(e)
     }
}

WebSocke后端搭建

新建一个文件夹,cmd执行以下指令:

npm install -y
npm i ws@7.3.0

创建js文件, ↓↓↓↓↓参考代码↓↓↓↓↓。

const WebSocket = require('ws')
;((Ws)=>{
   const server = new Ws.Server({port:3000})
   const init=() => {
      bindEvent();
   }

   function bindEvent(){
      server.on('open',handleOpen)
      server.on('close',handleClose)
      server.on('error',handleError)
      server.on('connection',handleConnection)
   }
   
   function handleOpen(){
      console.log("WebSocket Open")
   }  

   function handleClose(){
      console.log("WebSocket Close")
   }
   
   function handleError(){
      console.log("WebSocket Error")
   }
    //Connection之后才处理消息函数
   function handleConnection(ws){
      console.log('WebSocket Connection!')
      //绑定消息函数
      ws.on('message',handleMessage)
   }
   //消息函数
   function handleMessage(msg){

      server.clients.forEach((c)=>{
         c.send(msg)
      })
      console.log(msg)
   }
   init()
})(WebSocket)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamRol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值