电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

vue使用WebSocket模擬實現聊天功能

瀏覽:68日期:2023-02-15 14:18:45

效果展示 兩個瀏覽器相互模擬

vue使用WebSocket模擬實現聊天功能

vue使用WebSocket模擬實現聊天功能

1.創建模擬node服務

在vue根目錄下創建 server.js 文件模擬后端服務器

vue使用WebSocket模擬實現聊天功能

**在server終端目錄下載 **

npm install --s ws

2.編寫server.js文件

代碼如下

var userNum = 0; //統計在線人數var chatList = [];//記錄聊天記錄var WebSocketServer = require(’ws’).Server;wss = new WebSocketServer({ port: 8181 }); //8181 與前端相對應//調用 broadcast 廣播,實現數據互通和實時更新wss.broadcast = function (msg) { wss.clients.forEach(function each(client) {client.send(msg); });};wss.on(’connection’, function (ws) { userNum++;//建立連接成功在線人數 +1 wss.broadcast(JSON.stringify({ funName: ’userCount’, users: userNum, chat: chatList })); //建立連接成功廣播一次當前在線人數 console.log(’Connected clients:’, userNum); //接收前端發送過來的數據 ws.on(’message’, function (e) {var resData = JSON.parse(e)console.log(’接收到來自clent的消息:’ + resData.msg)chatList.push({ userId: resData.userId, content: resData.msg });//每次發送信息,都會把信息存起來,然后通過廣播傳遞出去,這樣此每次進來的用戶就能看到之前的數據wss.broadcast(JSON.stringify({ userId: resData.userId, msg: resData.msg })); //每次發送都相當于廣播一次消息 }); ws.on(’close’, function (e) {userNum--;//建立連接關閉在線人數 -1wss.broadcast(JSON.stringify({ funName: ’userCount’, users: userNum, chat: chatList }));//建立連接關閉廣播一次當前在線人數console.log(’Connected clients:’, userNum);console.log(’長連接已關閉’) })})console.log(’服務器創建成功’)

然后npm run start啟動服務器

3.vue前端頁面

代碼如下

<template> <div class='chat-box'> <header>聊天室人數:{{count}}</header> <div ref='msg-box'> <divv-for='(i,index) in list':key='index' : ><div class='user-head'> <div : ></div></div><div class='user-msg'> <span : : >{{i.content}}</span></div> </div> </div> <div class='input-box'> <input type='text' ref='sendMsg' v-model='contentText' @keyup.enter='sendText()' /> <div : @click='sendText()'>發送</div> </div> </div></template> <script>export default { data() { return { ws: null, count: 0, userId: null, //當前用戶ID list: [], //聊天記錄的數組 contentText: '', //input輸入的值 }; }, created() { this.getUserID(); }, mounted() { this.initWebSocket(); }, methods: { //根據時間戳作為當前用戶ID getUserID() { let time = new Date().getTime(); this.userId = time; }, //根據userID生成一個隨機頭像 getUserHead(id, type) { let ID = String(id); if (type == 'bck') {return Number(ID.substring(ID.length - 3)); } if (type == 'polygon') {return Number(ID.substring(ID.length - 2)); } if (type == 'rotate') {return Number(ID.substring(ID.length - 3)); } }, //滾動條到底部 scrollBottm() { let el = this.$refs['msg-box']; el.scrollTop = el.scrollHeight; }, //發送聊天信息 sendText() { let _this = this; _this.$refs['sendMsg'].focus(); if (!_this.contentText) {return; } let params = {userId: _this.userId,msg: _this.contentText, }; _this.ws.send(JSON.stringify(params)); //調用WebSocket send()發送信息的方法 _this.contentText = ''; setTimeout(() => {_this.scrollBottm(); }, 500); }, //進入頁面創建websocket連接 initWebSocket() { let _this = this; //判斷頁面有沒有存在websocket連接 if (window.WebSocket) {// 此處的 :8181 端口號 要與后端配置的一致let ws = new WebSocket('ws://192.168.5.42:9502'); // let ws = new WebSocket('ws://192.168.5.8:8181'); //這里是我本地測試_this.ws = ws;ws.onopen = function (e) { console.log('服務器連接成功');};ws.onclose = function (e) { console.log('服務器連接關閉');};ws.onerror = function () { console.log('服務器連接出錯');};ws.onmessage = function (e) { //接收服務器返回的數據 let resData = JSON.parse(e.data); if (resData.funName == 'userCount') { _this.count = resData.users; _this.list = resData.chat; } else { _this.list = [ ..._this.list, { userId: resData.userId, content: resData.msg }, ]; }}; } }, },};</script> <style lang='scss' scoped>.chat-box { margin: 0 auto; background: #fafafa; position: absolute; height: 100%; width: 100%; // max-width: 700px; header { position: fixed; width: 100%; height: 3rem; background: #409eff; // max-width: 700px; display: flex; justify-content: center; align-items: center; font-weight: bold; color: white; font-size: 1rem; } .msg-box { position: absolute; height: calc(100% - 6.5rem); width: 100%; margin-top: 3rem; overflow-y: scroll; .msg { width: 95%; min-height: 2.5rem; margin: 1rem 0.5rem; position: relative; display: flex; justify-content: flex-start !important; .user-head {min-width: 2.5rem;width: 20%;width: 2.5rem;height: 2.5rem;border-radius: 50%;background: #f1f1f1;display: flex;justify-content: center;align-items: center;.head { width: 1.2rem; height: 1.2rem;}// position: absolute; } .user-msg {width: 80%;// position: absolute;word-break: break-all;position: relative;z-index: 5;span { display: inline-block; padding: 0.5rem 0.7rem; border-radius: 0.5rem; margin-top: 0.2rem; font-size: 0.88rem;}.left { background: white; animation: toLeft 0.5s ease both 1;}.right { background: #53a8ff; color: white; animation: toright 0.5s ease both 1;}@keyframes toLeft { 0% { opacity: 0; transform: translateX(-10px); } 100% { opacity: 1; transform: translateX(0px); }}@keyframes toright { 0% { opacity: 0; transform: translateX(10px); } 100% { opacity: 1; transform: translateX(0px); }} } } } .input-box { padding: 0 0.5rem; position: absolute; bottom: 0; width: 97%; height: 3.5rem; background: #fafafa; box-shadow: 0 0 5px #ccc; display: flex; justify-content: space-between; align-items: center; input { height: 2.3rem; display: inline-block; width: 100%; padding: 0.5rem; border: none; border-radius: 0.2rem; font-size: 0.88rem; } .btn { height: 2.3rem; min-width: 4rem; background: #e0e0e0; padding: 0.5rem; font-size: 0.88rem; color: white; text-align: center; border-radius: 0.2rem; margin-left: 0.5rem; transition: 0.5s; line-height: 2.3rem; } .btn-active { background: #409eff; } }}</style> 然后npm run dev,就可以實現局域網聊天了,有無線的話可以用手機連著無線訪問你的IP地址訪問,沒的話可以試下多開幾個窗口,也是能看到效果的!! 進入聊天室時和發送信息時服務器的打印日志

vue使用WebSocket模擬實現聊天功能

到此這篇關于vue使用WebSocket模擬實現聊天功能的文章就介紹到這了,更多相關vue使用WebSocket實現聊天內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 湖北省煤炭供应链综合服务平台| 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 科客,主见不成见| 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 开云(中国)Kaiyun·官方网站 - 登录入口| 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 陕西自考报名_陕西自学考试网 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 家庭教育吧-在线家庭教育平台,专注青少年家庭教育 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 |