Software Design: Application Tier 2 com ClientDataSet e Sockets
Pergunta
Eu tenho a tarefa de criar um aplicativo de camada 2 como segue:
MSSQL banco de dados <-> Servidor <-> n-Client (n para muitos)
O cliente envia dados para o servidor. Os seleciona servidores coisas a partir do banco de dados e, em seguida, envia-lo de volta para o cliente. Atualmente estou fazendo isso com Records e SendDataToSocket (url é abaixo).
Quero usar TDBGrid no cliente utilizando dados recebidos via soquetes do servidor No momento, é assim:.
Servidor: DB -> ADOQuery -> DataSetProvider -> ClientDataSet -> SaveToStream (MemoryStream)
Cliente: ClientDataSet -> LoadFromStream (MemoryStream) -> DataSource -> DBGrid
Eu estou usando SendDataToSocket (soquete: TCustomWinSocket; Dados: Pointer; DataSize: Integer; buffer: TMemoryStream): Integer;
Então, o que eu quero fazer é enviar o fluxo do ClientDataSet no lado do servidor cria para o cliente que usa LoadFromStream para ler o fluxo. o SendDataToSocket é viável aqui?
Eu espero que você consiga o que quero dizer.
Solução
Sim, desde que o cliente estava pronto para receber os dados. Isso poderia funcionar bem, no entanto, dependendo da quantidade e do tipo de dados que você pode querer comprimir o fluxo de memória antes de enviar. Tenho realizado uma abordagem semelhante em projectos anteriores, mas eu usei sinapse para a transferência de dados ... mas o conceito básico era o mesmo.
A unidade zlib (incluído por CodeGear) contém um invólucro simples em torno de um fluxo que proporciona a compressão e a descompressão. Desde o seu controle ambos os lados do fio, a compressão vai aumentar o desempenho muito provavelmente, reduzindo o tempo de arame.