需要一个适当的数据结构来处理来自多个客户端的消息

时间:2012-04-12 17:15:16

标签: c sockets select

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我假设了很多东西。也就是说,您或组中的某个人将编写队列管理器,或者队列管理器可以接受您创建的参数。

随便,这听起来像你需要一系列结构。根据您认为将使用该服务的客户端数量,它可以是固定的结构数组或分配的堆内存块。根据您希望如何管理客户端,结构数组可以使用指向结构的指针,或者您可以为结构分配足够的存储空间。

我不知道您要在发送邮件时存储哪些数据。也许如果你写下字段,那会有所帮助。