12

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

我不确定当他们连接时我应该如何向客户发送旧消息。

例子:

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

我想知道客户端是否有任何方式可以接收旧消息(所有这些消息,或者过去 5 分钟内的消息都可以接受)。

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

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

4

2 回答 2

7

你可以这样做:

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

希望能帮助到你

于 2014-10-03T10:08:57.770 回答
6

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

顺便问一下,你用的是什么服务器端?(节点,二郎等)

如果您使用的是 node.js,您可以查看以下链接

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

于 2013-06-28T07:58:20.537 回答