html 未读消息红点,消息未读之点不完的小红点(Node+Websocket)

前言

这个项目原本是我学生时代为了找工做的一个练手项目,可是没想到受到了不少的关注,star也快要破K了,这也激励着我不断去完善他,一方面是得对得起关注学习的人,另外一方面也是想让本身能过经过慢慢完善一个项目来让本身提升。node

1460000017061588

今天给你们带来的是基于Websocket+Node+Redis未读消息功能,可能更加偏向于实战方向,须要对Websocket和Node有一些了解,固然不了解也能够看看效果,效果连接( https://www.qiufengh.com/ )说不定会激起你学习的动力~git

下面我经过本身思考的方式来进行讲解,代码可能讲的很少,可是核心逻辑都进行了讲解,上面也有github地址,有兴趣的能够进行详细地查看。本身的idea或多或少会有一些不成熟,可是我仍是厚着脸皮出来抛头露脸,若是有什么建议还请你们多多提出,能让我更加完善这个做品。github

设计

首先对于消息未读,你们都很熟悉,就是各类聊天的时候,出现的红点点,且是强迫症者必须清理的一个小点点,如👇所示。我会带你们实现一个这样的功能。

1460000017061589web

因为一对一的方式更加简单,我如今只考虑多对多的状况,也就是在一个房间(也能够称为群组,后面都以房间称呼)中的未读消息,那么设计这样的一个功能,首相我将它分红了3种用户。redis

离线用户

在线用户

在线用户且进入群组的用户

离线用户

这种场景就至关于咱们退出微信,可是别人在房间里发的消息,当咱们再次打开的时候依然可以看到房间增加的未读消息。mongodb

在线用户

这种场景就是至关咱们停留在聊天列表页面,当他人在房间中发送消息,咱们可以实时的看到未读消息的条数在增加。数据库

场景示例。ubuntu

1460000017061590?w=2000&h=2000

在线用户且在房间的用户

这种场景其实就比较普通了,当别人发送新的消息,咱们就能实时看到,此时是不须要标记未读消息的。windows

场景示例。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现websocket监听消息数量和已,可以在后端维护一个消息状态的数据结构,并在前端通过websocket连接不断地获取最新的消息状态。 下面是一个简单的示例代码,假设你使用的是Node.js和Socket.IO: 后端代码: ```javascript const app = require('express')(); const http = require('http').createServer(app); const io = require('socket.io')(http); // 维护消息状态的数据结构 const messageStatus = { total: 0, unread: 0 }; io.on('connection', (socket) => { console.log('a user connected'); // 发送最新的消息状态给客户端 socket.emit('messageStatus', messageStatus); socket.on('disconnect', () => { console.log('user disconnected'); }); }); // 模拟新消息到来 setInterval(() => { messageStatus.total++; messageStatus.unread++; // 向所有客户端发送最新的消息状态 io.emit('messageStatus', messageStatus); }, 5000); http.listen(3000, () => { console.log('listening on *:3000'); }); ``` 前端代码: ```html <!DOCTYPE html> <html> <head> <title>WebSocket Example</title> <script src="https://cdn.socket.io/socket.io-3.0.1.min.js"></script> </head> <body> <div>总消息数: <span id="total"></span></div> <div>消息数: <span id="unread"></span></div> <script> const socket = io('http://localhost:3000'); socket.on('messageStatus', (messageStatus) => { document.querySelector('#total').textContent = messageStatus.total; document.querySelector('#unread').textContent = messageStatus.unread; }); </script> </body> </html> ``` 这段代码中,后端维护了一个`messageStatus`对象,其中包含了总消息数和消息数。每当有新消息到来时,`messageStatus`会被更新,并通过`io.emit('messageStatus', messageStatus)`向所有客户端发送最新的消息状态。 前端通过`socket.io`连接到后端,并监听`messageStatus`事件,一旦收到最新的消息状态,就更新页面上的总消息数和消息数。 这只是一个简单的示例,实际应用中,你可能需要根据具体业务需求对消息状态的数据结构进行调整,并在前端实现更复杂的逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值