WebSocket原生实现

WebSocket-Vue2

WebSocket-Vue3

前端实现

目录结构

登录(LoginView.vue)

<template><div class="login"><input type="text" placeholder="请输入用户名" v-model="userName"><br><input type="password" placeholder="请输入密码" v-model="passWord"><br><button @click="handleEntryClick">登录</button></div>
</template>
<script>
import {ref, onMounted} from 'vue'
import {useRouter} from 'vue-router'
export default {name: 'Login',setup () {const userName = ref('')const passWord = ref('')const router = useRouter()onMounted(() => {console.log(localStorage.getItem('userName'))if (!localStorage.getItem('userName')) {router.push('/')return}})const handleEntryClick = () => {const _passWord = passWord.value.trim()console.log('userName', userName)console.log('passWord', passWord)if (_passWord.length < 6) {alert('密码不能小于6位')return}localStorage.setItem('userName', userName.value)userName.value = ''passWord.value = ''router.push('/home')}return {userName,passWord,handleEntryClick}}
}
</script>

聊天室(HomeView.vue)

<template><div><div><ul><li v-for="(item, index) in msgList" :key="index"><p><span>用户:{{item.user}}</span><span>{{new Date(item.dateTime)}}</span></p><p>消息:{{item.msg}}</p></li></ul></div><hr><input type="text" placeholder="请输入消息" v-model="msg"><button @click="handleSendMsg">发送</button></div>
</template><script>
import {reactive, onMounted, toRefs} from 'vue'
import {useRouter} from 'vue-router'
import useWebSocket from '@/hooks'
export default {name: 'HomeView',components: {},setup() {const state = reactive({msg: '',msgList: []})let userName = localStorage.getItem('userName')const router = useRouter()const ws = useWebSocket(handleMessage)onMounted (() => {if (!userName) {router.push('/')}})const handleSendMsg = () => {if (!state.msg.trim().length) {return}ws.send(JSON.stringify({user: userName,msg: state.msg,dateTime: new Date().getDate()}))}function handleMessage ({data}) {console.log('data',JSON.parse(data))const msg = JSON.parse(data)state.msgList.push(msg)}return {...toRefs(state),handleSendMsg}}
}
</script>

webscoket封装

import WS_BASE_URL from '../configs'
function useWebSocket (handleMessage) {const ws = new WebSocket(WS_BASE_URL)const init = () => {bindEvent()}function bindEvent () {console.log('绑定事件')ws.addEventListener('close', handleClose, false)ws.addEventListener('open', handleOpen, false)ws.addEventListener('error', handleError, false)ws.addEventListener('message', handleMessage, false)}function handleOpen (e) {console.log('handleOpen', e)}function handleClose (e) {console.log('handleClose', e)}function handleError(e) {console.log('handleError', e)}init()return ws
}
export default useWebSocket

效果实现

WebSocket——vue3简易聊天室相关推荐

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下: http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.j ...

  2. 原创 回归前端学习第21天-实现俄罗斯方块小游戏3(深入了解Websocket~优化简易聊天室)

    对昨天的简易聊天室进行优化 增加一个mes对象,将传送的数据放在对象里 增加一个mes对象,将传送的数据放在对象里 wsServer.js中替换代码 broadcast(conn.nickname + ...

  3. Vue3 -- 基于Websocket实现简易聊天室

    文章目录 标题 代码地址 表情包资源 chat.data.ts index.vue 标题 接上一篇博文 这里使用 Vue3 + Typescript + Websocket 实现在线聊天功能的前端部分 ...

  4. nodejs websocket 实现简易聊天室功能

    文章目录 1. 服务端 app.js 代码 2. 客户端 app.html 代码 3. 样式代码 app.css 4. nodemon 辅助开发 首先说明,以下代码都是基于 Nodejs+webSoc ...

  5. webSocket——Vue2简易聊天室

    WebSocket原生实现 WebSocket-Vue2 WebSocket-Vue3 Vue2版本实现 前端实现 目录结构 login.vue 登录 <template><div& ...

  6. websocket实现简易聊天室

    websocket支持全双工通信,也就是客户端和服务端双向通信.以前都是通过http轮询的方式实现实时的,这非常耗性能.Websocket不仅能节省资源和带宽,还能实现长链接的作用 前端通过创建Web ...

  7. Java WebSocket实现简易聊天室

    一.Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Socket的英文原义是"孔"或 ...

  8. 前端websocket实现简易聊天室

    分为客户端和服务端,客户端就是一个简单的html页面,服务端使用node进行编写.具体代码如下 index.html <!DOCTYPE html> <html> <he ...

  9. SpringBoot整合WebSocket实现简易聊天室

    文章目录 什么是WebSocket ? WebSocket通信模型 为什么需要WebSocket Websocket与http的关系 SpringBoot集成WebSocket 什么是WebSocke ...

最新文章

  1. [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
  2. 2017年云栖大会-云HBase专场会后资料-欢迎扩散
  3. Django的model模型
  4. eureka架构图原理
  5. mysql 存储过程中limit
  6. 技术动态 | 图对比学习的最新进展
  7. jap sql 保存_【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中...
  8. 图像处理:Canny边缘检测算法原理(一)
  9. 通过利用“业务映射”来构建敏捷组织
  10. 贝叶斯信息融合 MATLAB,信息融合理论研究进展:基于变分贝叶斯的联合优化
  11. 新唐N76E003单片机用APROM模拟EEPROM每次下载写入值复位为0XFF
  12. 飞信WEB接口的一个返回网页C#处理源码
  13. 拼多多秒杀活动的谣言
  14. Store generated project files externally
  15. Light-sleep 模式下的电流功耗测试及特性(使用 Wi-Fi)
  16. 【阿里云】云服务器ECS怎么一键重装系统
  17. Telnet 控制智能灯泡
  18. [论文阅读] Self-Sustaining Representation Expansion for Non-Exemplar Class-Incremental Learning
  19. qcqa是什么职位_qa是什么意思工作职责(qa和qc哪个工资更高)
  20. 【最经典的79个】软件测试面试题(内含答案)都是可以提前准备的!

热门文章

  1. IMaT: Unsupervised Text Attribute Transfer via Iterative Matching and Translation
  2. 源代码软件的编译安装
  3. 一张好的图胜过千言万语!数据可视化都经历了怎样的发展历程
  4. stm32开发板能干什么?stm32开发板功能介绍
  5. Python 的 Magic Methods 指南
  6. 【转】使用NM-16ESW模拟交换机--使用经验
  7. NYoj 20 深搜
  8. 分形之康托(Cantor)三分集
  9. 怎么看主机是否支持4k?
  10. PHP7新特性--返回值类型声明