几个在线【聊天室】项目
- hack.chat/
- aqchat.run/
- randomchat.cn
记录自己做【web聊天室】时,遇到的问题,以及功能实现。
说下,「之前离线时别人发的消息」在我「上线」时,该怎么处理。
一般有两种处理方式:
- 上线立刻拉取历史消息
- 离线推送
离线 / 在线推送
其实现主要在后端。
当发现【目标用户】不在线时,就不推送给他。 而是把这个信息一直存在某个数组中,当此【目标用户】上线了,再一次性全部推送给他。
在 【群聊】场景中,一般都是使用【上线拉取历史消息】。
假设群里10个人,此时4个在线,6个不在线。 【A】发了个消息。 如果采用【离线推送】。 那就是,立即推给在线的4人,然后把这个消息存在那6个人每人的离线推送列表中都放一份。
存在【A】给联系人【B】发了一个消息,而此时【B】不在线。
这个相当于 微信 / QQ 在线 和 上线 收到的消息。 当 A 用户 @ 了 B 用户 (此时 B 用户 不在线)。当 B 用户 上线时,它会收到 一条信息。这个是怎么实现呢?
当 A 用户 @ 了 B 用户 ,正常逻辑会推送给B用户一条信息,B 不在线,就不推给他?
怎么知道B 用户是否在线呢?
提到输入功能,首先想到的就是 < textarea > 和 < input > 这两个标签
但,这两个标签都是【纯文本编辑】,内部不能加入其它标签。
如今,想要实现「在输入区域能预览图片」的功能,就需要【富文本编辑】。
只能选择 contentEditable 方案了。
首先肯定要给 div 设置 contentEditable 属性,
当然在 React 中,如果某个标签设置了该属性,并且此标签还有 children ,就会有以下警告:
A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.
React 官方文档给出了解决方式,设置 suppressContentEditableWarning 即可: