首页 前端知识 Nodejs WebSocket Vue 一对一、一对多聊天室 - 第三章

Nodejs WebSocket Vue 一对一、一对多聊天室 - 第三章

2024-05-27 09:05:49 前端知识 前端哥 325 497 我要收藏

nickname: obj.nickname,

// 增加参数

bridge: obj.bridge

});

} else {

boardcast({

type: 2,

date: moment().format(‘YYYY-MM-DD HH:mm:ss’),

msg: obj.msg,

uid: obj.uid,

nickname: obj.nickname,

// 增加参数

bridge: obj.bridge

});

}

})

conn.on(“close”, function (code, reason) {

console.log(“关闭连接”)

});

conn.on(“error”, function (code, reason) {

console.log(“异常关闭”)

});

}).listen(8001)

console.log(“WebSocket建立完毕”)

主体结构还是和第二章类型,不同的是:

1、每次将uid对应的conn存储到一个对象conns上

2、根据客户端传入的参数bridge来判断,是群发还是一对一发送

3、群发还是第二章逻辑即可

server.connections.forEach((conn, index) => {

conn.sendText(JSON.stringify(obj));

})

4、一对一发送,bridge里面是一对一的两个用户uid,这样就可以在conns对象上找到uid对应的连接conn,并用conn发送信息即可

if(obj.bridge && obj.bridge.length){

obj.bridge.forEach(item=>{

conns[item].sendText(JSON.stringify(obj));

})

return;

}

WebSocket客户端

export default {

data(){

return {

title: ‘群聊’,

uid: ‘’,

nickname: ‘’,

socket: ‘’,

msg: ‘’,

// 当前用户所有消息

messageList: [],

users: [],

bridge: []

}

},

mounted() {

},

computed: {

// 当前对话渲染的msg列表

currentMessage() {

let vm = this;

// 筛选只有bridge相同的对话,展示出来

// 数组比较,先转成字符串

let data = vm.messageList.filter(item=>{

return item.bridge.sort().join(‘,’) == vm.bridge.sort().join(‘,’)

})

return data;

}

},

methods: {

// 切换到群聊

triggerGroup() {

this.bridge = [];

this.title = ‘群聊’;

},

// 切到具体个人

triggerPersonal(item) {

if(this.uid === item.uid){

return;

}

// 将当前用户uid,和需要对话的uid放入bridge

this.bridge = [this.uid, item.uid];

this.title = ‘和’ + item.nickname + ‘聊天’;

},

send(){

if(!this.msg){

return

}

this.sendMessage(2, this.msg)

},

sendMessage(type, msg){

this.socket.send(JSON.stringify({

uid: this.uid,

type: type,

nickname: this.nickname,

msg: msg,

// 增加bridge参数

bridge: this.bridge

}));

this.msg = ‘’;

},

conWebSocket(){

let vm = this;

if(window.WebSocket){

vm.socket = new WebSocket(‘ws://localhost:8001’);

let socket = vm.socket;

socket.onopen = function(e){

console.log(“连接服务器成功”);

if(!vm.uid){

}

// 这里将sendMessage方法if外面

vm.sendMessage(1)

}

socket.onclose = function(e){

console.log(“服务器关闭”);

}

socket.onerror = function(){

console.log(“连接出错”);

}

// 接收服务器的消息

socket.onmessage = function(e){

let message = JSON.parse(e.data);

vm.messageList.push(message);

if(message.users) {

vm.users = message.users;

}

}

}

},

login(){

}

}

}

上方…的代码区域都是和第二篇文章一样的地方,所有就省略了。

1、默认是群发,即bridge是空数组,向所有用户发送消息

2、点击用户列表,赋予bridge当前用户uid,和需要对话的uid。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

刷面试题

刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 前端字节跳动真题解析

  • 【269页】前端大厂面试题宝典

最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9624.html
标签
websocket
评论
发布的文章

html5怎么实现语音搜索

2024-06-01 10:06:32

HTML5

2024-02-27 11:02:15

HTML - 头部元素

2024-06-01 10:06:06

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!