我有一个有效的 Websockets 示例,其中客户端从服务器接收消息。
我不确定当客户端连接时应该如何向客户端发送旧消息。
Example:
- 每个客户端在连接时提供他们的名字
- 服务器响应“[名称]刚刚连接”(对所有客户端)
- 任何新客户都不会收到这些消息
我想知道客户端是否可以通过任何方式接收旧消息(所有消息或最近 5 分钟内的消息都可以接受)。
我怀疑我可能必须自己捕获这些信息,将其存储在某个地方(例如数据库),然后自己将消息发送给新客户。是这样吗,还是我错过了什么?
如果有人有伪代码,或者其他人如何实现这一点的示例的链接,那会很方便。
你可以这样做:
- 每条消息都应该有一个 id ->muid (消息唯一ID)
- 每次客户端发送一条消息时,它都会从服务器获得一个 ACK 以及muid对于已发送的消息。
- 服务器端每次收到新消息时,muid被分配,与 ACK 一起发送,并且还与消息一起发送给每个连接的用户。这样,视图将能够在某个时间点为每个用户呈现相同的序列。
- Each time a new user connects it sends the last muid it has received so the server knows where this user stopped receiving messages. The server could then send as many old messages as you want, depending on the kind of storage you implement:
- 完整历史:我会推荐具有适当索引的数据库存储
- 最后 N 条消息:根据 N 的大小,您可以简单地将最后 N 条消息存储在固定大小的数组中,并在每次重新连接时发送全部或所需的块。请记住,这会消耗内存,因此,存储 1024 个不同聊天的最后 1024 条消息会占用相当多的内存,特别是如果消息的大小不受限制。
希望能帮助到你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)