如何使用Websockets发送旧消息

时间:2013-06-28 07:53:03

标签: javascript websocket

我有一个有效的Websockets示例,其中客户端从服务器接收消息。

我不确定如何在连接时向客户端发送旧邮件。

示例:

  • 每个客户端在连接时提供其名称
  • 服务器响应“[name] just connected”(对所有客户端)
  • 任何新客户都不会收到这些消息

我想知道客户是否可以接收旧消息(无论是全部消息,还是过去5分钟内的消息都可以接受)。

我怀疑我可能必须自己捕获这些信息,将其存储在某个地方(如数据库)并自己将消息发送给新客户。是的,或者我错过了什么?

如果有人有伪代码,或者链接到其他人如何实现这一点的示例,那将会很方便。

2 个答案:

答案 0 :(得分:4)

您必须自己捕获并将其存储在服务器上...一旦用户连接,您必须将该数据命名为所有连接的客户端,并将已存储的消息返回给已连接的用户。因此,您必须编写代码以向用户广播数据

顺便问一下你在服务器端使用什么? (Node,Erlang等)

如果您使用node.js

,可以查看以下链接

http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial

答案 1 :(得分:2)

你可以这样做:

  1. 每条消息都应该有一个id - > muid 消息唯一ID
  2. 每次客户端发送消息时,它都会从服务器获取ACK以及发送消息的 muid
  3. 每次在服务器端收到新消息时,都会分配 muid ,与ACK一起发送,并随消息一起发送给每个连接的用户。这样,视图将能够为每个用户在某个时间点呈现相同的序列。
  4. 每次新用户连接时,都会发送收到的最后一个 muid ,以便服务器知道此用户停止接收邮件的位置。然后,服务器可以根据您的需要发送尽可能多的旧邮件,具体取决于您实现的存储类型:
    1. 完整历史记录:我建议使用正确索引的数据库存储
    2. 最后N条消息:根据N的大小,您可以简单地将最后N条消息存储在固定大小的阵列中,并在每次重新连接时发送它们,所有或所需的块。请记住,这将消耗内存,因此,为1024个不同的聊天记录存储最后1024条消息会占用相当多的内存,特别是如果消息的大小不受限制。
  5. 希望有所帮助