假设我有一些系统可以协调许多文件的传输;也就是说,我有一个 Indy TCP 服务器来控制大型分布式系统上的文件同步。
目前,为了向特定客户端发送文件,需要锁定服务器上的 Contexts 列表。
如果我有 500 个客户端全部连接并进行同步,我怀疑这种锁定在性能上会非常昂贵,因为它会停止所有客户端连接线程。
有没有办法加快速度,或者这不是一个真正的问题?值得在多台服务器上分发客户端吗?有什么诀窍?
干杯,阿德里安
没有必要仅仅为了发送文件而锁定上下文列表。让操作系统为您处理任何文件锁定。向客户端发送文件时,让客户端以只读模式打开文件。这允许多个客户端同时读取同一个文件。如果客户端正在上传文件,请以独占模式打开文件,以便其他客户端在上传完成之前无法访问该文件。
如果客户端始终处于连接状态,则 OnExecute 方法(循环运行直到连接终止)可用于在数据可用时向客户端发送数据。但是,这要求协议在您的控制之下。
可以在这里找到一个相关的问题和一个详细的答案,它显示了如何避免锁定列表: