2009-08-07 5 views
1

Ich habe die Aufgabe, ein Tier-2-Anwendung zu erstellen, wie folgt:Software Design: Tier-2-Anwendung mit ClientDataSet und Sockets

MSSQL-Datenbank < -> Server < -> n-Client (n für viele)

Der Client sendet Daten an den Server. Der Server wählt Sachen aus der Datenbank aus und sendet sie dann an den Client zurück. Momentan mache ich das mit Records und SendDataToSocket (URL ist unten).

Ich möchte TDBGrid auf dem Client mit Daten verwenden, die über Sockets vom Server empfangen werden. Im Moment geht es wie folgt aus:

Server: DB -> ADOQuery -> DataSetProvider -> ClientDataSet -> SaveToStream (Memorystream)

Auftraggeber: ClientDataSet -> Loadfromstream (Memorystream) -> Datasource -> DBGrid

ich bin mit SendDataToSocket(Socket: TCustomWinSocket; Data: Pointer; DataSize: Integer; Buffer: TMemoryStream): Integer;

Also, was ich tun möchte, ist senden Der Stream erstellt das clientdataset auf der Serverseite für den Client, der loadfromstream verwendet, um den Stream zu lesen. Ist der SendDataToSocket hier praktikabel?

Ich hoffe du bekommst was ich meine.

Antwort

1

Ja, solange der Client bereit war, die Daten zu empfangen. Dies funktioniert jedoch gut, abhängig von der Menge und Art der Daten, die Sie möglicherweise vor dem Senden des Speicherstroms komprimieren möchten. Ich habe einen ähnlichen Ansatz in früheren Projekten durchgeführt, aber ich verwendete synapse für die Datenübertragung ... aber das Grundkonzept war das gleiche.

Die zlib-Einheit (in CodeGear enthalten) enthält einen einfachen Wrapper um einen Stream, der Komprimierung und Dekomprimierung ermöglicht. Da Sie beide Seiten des Kabels steuern, wird die Komprimierung höchstwahrscheinlich die Leistung durch Reduzierung der Kabelzeit erhöhen.

+0

Vielleicht möchten Sie hier schauen: http://stackoverflow.com/questions/1254578/synapse-cannot-receive-data-from-socket Darüber hinaus gibt es weitere Beispiele auf Synapse? – Acron

Verwandte Themen