1

在我们的应用程序中,我们有一个服务器将连接到多个客户端。供您参考,它是单线程应用程序。每当客户端想要向其他客户端发送一些消息时,它将通过服务器。每当客户端向服务器发送消息时,它都会将消息存储到Dqueue. 服务器会从 中一一提取消息,Dqueue并调用select()并检查应该发送消息的通道是否可用。如果是,它会发送,否则它将插入到后面,以便我们可以处理其他消息。但是这种方法的问题是,假设客户端C1发送两条消息S1S2。现在,当服务器尝试发送S1到其他客户端时C2, C2 很忙,因此它将消息 S1 推到队列的后面。现在假设在处理过程S2中,客户端已经准备好了。C2所以服务器现在可以发送了S2。但问题是消息会以C2相反的顺序 ( S2 S1) 到达。

您能否建议哪种数据结构适合于此,以便我们可以保持相同的消息顺序?

4

2 回答 2

1

不要使用单个队列来处理所有消息。每个客户端都需要自己的单独队列。当消息到达时,确定它的目的地客户端并将消息放在该客户端队列的末尾。然后更新您的服务器逻辑以仅将给定客户端队列中的顶部消息发送到该客户端。如果客户端很忙,请不要发送顶部消息。如果客户端已准备好,则发送顶部消息并将其从该客户端的队列中删除。

于 2012-04-12T20:51:52.393 回答
0

我假设一堆事情。也就是说,您或您组中的某个人将编写队列管理器,或者队列管理器可以接受您创建的参数。

副手,这听起来像你需要一个结构数组。根据您认为将使用该服务的客户端数量,它可能是固定的结构数组或分配的堆内存块。根据您管理客户端的方式,结构数组可以使用指向结构的指针,或者您可以为结构分配足够的存储空间。

我不知道您要存储哪些数据作为发送消息的一部分。也许如果你把字段写下来,那会有所帮助。

于 2012-04-12T17:22:26.827 回答