我有一个客户服务器应用程序(TCP),它是用indy delphi设计的。 我想在我的服务器端应用程序中有一个队列和流量控制。 当服务器流量已满时,我的服务器不应丢失任何客户端数据。 例如,在我的服务器端应用程序中,我想确定服务器的最大带宽是10Mbps,然后如果服务器带宽(此10Mbps)已满,则其他客户端将处于队列状态,直到带宽空闲。 所以我想知道如何用delphi设计这个? 谢谢 最好的考虑
答案 0 :(得分:0)
客户端不应将消息直接发送到服务器。将消息放在本地存储(f.i. sqlite-db)中,并在线程中读取本地存储中的第一条消息并尝试将其发送到服务器。
如果邮件已发送到服务器(未引发异常),请从本地存储中删除邮件并处理下一个"第一个"本地商店的消息。
答案 1 :(得分:0)
在接收客户端数据的TIdTCPServer.OnExecute方法中,可以使用简单的Sleep命令“延迟”处理传入的请求。在睡眠命令完成之前,客户端数据将保留在TCP套接字中。
如果您的服务器跟踪所有客户端的当前“全局”带宽使用情况,则可以动态设置休眠时间。您甚至可以为不同的客户设置不同的优先级。
因此,您需要一个简单但线程安全的带宽使用监视器,一种计算合理睡眠时间值的算法,以及一种将此休眠时间分配给各个客户端连接上下文的方法。
另见: