【发布时间】:2018-05-20 05:11:12
【问题描述】:
我目前正在开发一个使用 socket.io 提供聊天室功能的 react-native 应用程序
我目前愿意处理消息的未读/已读状态,但我不知道这个逻辑应该存在于哪里:在客户端代码中还是在服务器端?
这是我的代码组件方面的基本实现
<ChatRoomCard /> //-> displays the last message and the chatroom title and
can navigate to the ChatRoom component
<ChatRoom id={} />
我的 reduxState 是这样的:
{
chatRooms: [{chatRoomId: '', title: ''}],
chatRoomsMessages: {
[chatRoomId]: [{messageId: '', text: ''}]
}
}
每个组件都连接到 redux,ChatRoomCard 接收包含对象数组的 chatRooms 属性 `[{chatroomId: ''}] 而 ChatRoom 组件只接收相应的消息。
如果是在客户端,我的第一次尝试是为每个 ChatRoomCard 添加一个状态 lastRead : timestamp,每次安装 ChatRoom 组件时都会更新此状态,从而显示最后的消息。
现在,当套接字 io 事件“new msg”触发并且我收到新消息时,我可以在 ChatRoomCard 组件中映射消息,将 message.createdAt 时间戳与 ChatRoomCard.lastReadTimestamp 进行比较,并增加“未读消息计数” ' 只要 message.timestamp 在 lastReadTimestamp 之后。
这个解决方案听起来不错吗?还是这个逻辑属于后端?或者也许两者兼而有之?我有点迷茫,因为这是我第一次这样做
非常感谢
【问题讨论】:
-
您是否希望其他用户知道该消息是否已被阅读?或者您是否希望用户知道已阅读的消息?时间戳是从服务器传给我们的信息,告诉我们何时写入消息?
-
嗨@TomKarachristos 感谢您的关注,对于当时的第一个问题,我只想让当前用户跟踪这一点,是的,时间戳来自服务器,目前消息如下:
{ created_at: timestamp, text: '', user: {}
标签: javascript reactjs react-native socket.io redux