2013-06-28 39 views
8

我有一个工作的WebSockets例如,当客户端从服务器接收邮件发送旧消息。如何使用WebSockets

我不知道在连接时应该如何向客户端发送旧消息。

例子:

  • 当他们连接
  • 服务器用“[名]刚接通”(向所有客户端)
  • 响应每个客户端提供自己的姓名任何新客户端将无法获得这些消息

我想知道是否有任何方式客户端可以接收旧消息(无论是他们所有人,或过去5分钟内的消息将是可以接受的)。

我怀疑我可能捕捉到了这个信息我自己,它存储在某处(如数据库),并发送消息给新客户自己。那是对的,还是我错过了什么?

如果任何人有伪代码,或向其他人如何实现这个例子的链接,这将是得心应手。

+0

是不是因为服务器当前连接的客户端列表发送到任何新的客户端一样简单? – JeffRSon

+0

@JeffRSon我希望能够发送任何任意数据。 –

+0

我不确定发送过期邮件是否有意义。假设客户端已连接并断开连接。你会把这两个消息发送给任何新客户吗?或者你会知道,断开连接的消息必须“删除”以前连接的消息吗?如果不是用于日志记录,则只应发送当前状态。而对于日志记录,您必须保留大量信息才能发送 - 不过只有一次。 – JeffRSon

回答

4

您必须通过自己的捕捉到它并将其存储在服务器上......一旦用户连接,你将不得不名称数据连接的所有客户,您已存回谁已连接用户的消息。所以,你将不得不代码,数据广播给用户

通过你在使用服务器端的方式吗? (节点,二郎等)

你可以,如果你正在使用Node.js的

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

+0

尔加。这很烦人。我希望通过找到一些隐藏在Websocket实现中的超酷“消息队列”功能来避免它。是的,我正在使用节点。 –

+0

:)没有超酷的“消息队列”实施。然而,如果你希望实现的消息队列的简单,你可以使用RabbitMQ的或容易的其他消息队列.. –

+0

会变成这样可能在这里:http://stackoverflow.com/questions/26056688/get-past-messages-from-websocket –

2

你可以做这样的事情检查以下链接:

  1. 每条消息应该有一个id - >muid消息唯一ID
  2. 每次客户端发送消息时,来自服务器的ACK以及用于发送的消息的mull
  3. 每个在服务器侧接收到新的消息时,一个MUID被分配,与ACK发送,并且还与消息发送到每个已连接的用户。通过这种方式,视图将能够为每个用户呈现当时某个时刻的相同序列。
  4. 每个新用户连接发送的最后MUID它已收到这样的服务器知道这个用户停止接收消息的时间。然后,服务器可以,只要你想发送尽可能多的旧消息,这取决于你实现类型的存储:
    1. 全部历史:我会建议数据库存储适当的索引
    2. 最后N消息:根据大小N可以简单地将最后的N条消息存储在一个固定大小的数组中,并在每次重新连接时发送所有或所需的数据块。请记住,这将消耗内存,因此,为1024个不同的聊天存储最后的1024条消息会占用相当多的内存,特别是如果消息的大小无限。

希望它可以帮助