4

我正在与 Erlang 进行 Comet 聊天。我只使用一个连接(长轮询)进行消息传输。但是,如您所知,长轮询连接不能一直保持连接。每次有新消息到达或达到超时时间时,它都会中断,然后再次连接到服务器。如果在连接重新连接之前发送了一条消息,那么保持聊天的完整性就会出现问题。

此外,如果用户使用 Comet-chat 打开多个窗口,则所有聊天消息必须保持同步,这意味着用户可以拥有大量长轮询连接。所以很难保证每条消息都按时送达。

我应该为每个连接建立一个消息队列吗?或者还有什么更好的方法来解决这个问题?

4

1 回答 1

1

对我来说,让每个用户有一个进程/消息队列连接到聊天似乎是最简单的方法(甚至有多个聊天窗口)。比跟踪聊天窗口应用程序中最后一条消息的时间戳,以及在此时间戳之后重新连接时请求消息。消息队列进程应该只在合理的时间跨度内保留消息。在这种情况下,重新连接完全取决于客户端。在另一种情况下,您可以从服务器发送某种 hart beat,但对我来说似乎不太可靠。除了超时之外,它没有解决其他断开连接原因的问题。服务器端排队有许多变体,每个客户端、每个用户、每个聊天室、每个 ...

于 2009-08-24T08:59:40.740 回答