繁体   English   中英

如何使用Websockets发送旧消息

[英]How to send old messages with Websockets

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

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

例:

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

我想知道客户是否有任何方式可以接收旧消息(无论是全部消息,还是最近5分钟内的消息都可以接受)。

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

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

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

那么你使用服务器端的方式是什么? (节点,Erlang等)

如果您使用node.js,可以检查以下链接

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

你可以这样做:

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

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM