在我们的应用程序中,我们有一个服务器将连接到多个客户端。供您参考,它是单线程应用程序。每当客户端想要向其他客户端发送一些消息时,它将通过服务器发送。每当客户端向服务器发送消息时,它都会将消息存储到
Dqueue
中。服务器会从Dqueue
中一一提取消息,并调用select()
并检查要发送消息的通道是否可用。如果是,则发送,否则将其插入后面,以便我们可以处理其他消息。但这种方法的问题是,假设客户端C1
发送两条消息S1
和S2
。现在,当服务器尝试将 S1
发送到其他客户端 C2
时,C2 正忙,因此它将把消息 S1 推入队列的后面。现在假设在处理S2
时,客户端C2
已准备就绪。因此服务器现在可以发送S2
。但问题是消息将以相反的顺序到达 C2
(S2
S1
)。
您能否建议哪种数据结构适合于此,以便我们可以保持相同的消息顺序?
不要使用单个队列来处理所有消息。每个客户端都需要自己的单独队列。当消息到达时,确定它的目的地客户端并将消息放在该客户端队列的末尾。然后更新服务器逻辑以仅将给定客户端队列中的顶部消息发送给该客户端。如果客户端正忙,则不要发送置顶消息。如果客户端准备就绪,请发送顶部消息并将其从该客户端的队列中删除。
我假设了很多事情。也就是说,您或您小组中的某人将编写队列管理器,或者队列管理器可以接受您创建的参数。
顺便说一下,这听起来像是您需要一个结构数组。根据您认为将使用该服务的客户端数量,它可以是固定的结构数组或分配的堆内存块。根据您希望如何管理客户端,结构数组可以使用指向结构的指针,或者您可以为结构分配足够的存储空间。
我不知道您在发送消息时要存储哪些数据。如果您写下字段,也许会有帮助。