5

LAN に配置されたファイルに問題があります。複数の Deplhi プログラム (クライアント) のみが読み取ることができるいくつかのファイルを書き込む必要がある単一の Delphi プログラム (サーバー) があります。サーバーで次の簡単な手順を使用して書き込みます (DataList は TStrings です)。

Stream:=TFileStream.Create(filePath,fmOpenWrite or fmShareDenyWrite);
try
 DataList.SaveToStream(Stream);
finally
 Stream.Free;
end;

クライアントは、上記のファイルが変更されているかどうか (FileAge を確認するだけで) 5 秒ごとに確認し、変更が発生した場合は、次の方法で DataList を読み込みます。

try
 Stream:=TFileStream.Create(filePath,fmOpenRead or fmShareDenyNone);
 DataList.LoadFromStream(Stream);
finally
 Stream.Free;
end;

通常、すべてが完全に機能しますが、「ファイルが他のプロセスによって使用されている」という理由で、サーバーまたはクライアントが例外を発生させることがあります。どれが問題なのかわかりません。多くの代替手段を試しましたが、これはサーバーだけで実行されているクライアントのインスタンスが 1 つだけの場合にも発生する可能性があります。

何か案は?

ありがとう!

4

1 に答える 1

3

設計上、ネットワーク ファイル システムは信頼できません。少なくとも、NFS (Linux の場合) と SMB (Windows の場合) には実証済みのロック機能がありません。同時アクセスは安全ではありません。

共有データが安全であることを確認するには、クライアント サーバー プロトコルを使用する必要があります。TCP/IP、HTTP、またはその他の手段を使用できます。

DataSnap、RemObjects、オープン ソースの mORMotなどの真のサービス実装を使用することをお勧めします。

于 2012-07-25T19:23:11.057 に答える