我有一个正在工作的Websockets示例,其中客户端从服务器接收消息。
我不知道当客户端连接时我应该如何向他们发送旧消息。
示例:
- 每个客户端在连接时提供其名称
- 服务器以"[名称]刚刚连接"(对所有客户端)响应
- 任何新客户都不会收到这些消息
我想知道是否有任何方法可以让客户端接收旧消息(要么全部接收,要么在最后5分钟内接收)。
我怀疑我可能必须自己捕获这些信息,将其存储在某个地方(比如数据库),然后自己将消息发送给新客户。是这样吗,还是我错过了什么?
如果有人有伪代码,或者链接到其他人如何实现这一点的示例,那就很方便了。
您可以这样做:
- 每条消息都应该有一个id->muid(消息唯一id)
- 每次客户端发送消息时,它都会从服务器获得一个ACK,以及发送消息的muid
- 每次在服务器端接收到新消息时,都会分配一个muid,并与ACK一起发送,还将消息一起发送给每个连接的用户。这样,视图将能够在某个时间点为每个用户呈现相同的序列
- 每次新用户连接时,它都会发送它接收到的最后一个muid,这样服务器就知道这个用户在哪里停止接收消息了。然后,服务器可以根据您实现的存储类型,发送任意数量的旧消息:
- 完整历史记录:我建议使用具有适当索引的数据库存储
- 最后N条消息:根据N的大小,您可以简单地将最后N条信息存储在一个固定大小的数组中,并在每次重新连接时发送它们(全部或所需的块)。请记住,这将消耗内存,因此,为1024个不同的聊天存储最后1024条消息将消耗相当多的内存,特别是在消息大小不受限制的情况下
希望它能帮助
您必须自己捕获它并将其存储在服务器上。。。一旦用户连接,您就必须将数据命名为所有连接的客户端,并将存储的消息返回给连接的用户。因此,你必须编码才能将数据广播给用户
顺便问一下,你在服务器端使用什么?(Node、Erlang等)
如果您正在使用node.js ,您可以查看以下链接
http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial