Разработка программного обеспечения: приложение уровня 2 с ClientDataSet и сокетами
У меня есть задача создать приложение уровня 2 следующим образом:
База данных MSSQL <-> Сервер <-> n-Client (n для многих)
Клиент отправляет данные на сервер. Сервер выбирает материал из базы данных и затем отправляет его обратно клиенту. В настоящее время я делаю это с Records и SendDataToSocket(url ниже).
Я хочу использовать TDBGrid на клиенте, используя данные, полученные через сокеты с сервера. На данный момент это выглядит так:
Сервер: БД -> ADOQuery -> DataSetProvider -> ClientDataSet -> SaveToStream(MemoryStream)
Клиент: ClientDataSet -> LoadFromStream (MemoryStream) -> Источник данных -> DBGrid
Я использую SendDataToSocket(Socket: TCustomWinSocket; Data: Pointer; DataSize: Integer; Буфер: TMemoryStream): Integer;
Поэтому я хочу отправить поток, который клиентский набор данных на стороне сервера создает, клиенту, который использует loadfromstream для чтения потока. Действительно ли SendDataToSocket здесь?
Я надеюсь, вы понимаете, о чем я.
1 ответ
Да, пока клиент был готов к получению данных. Это будет хорошо работать, однако в зависимости от объема и типа данных, которые вы можете сжать поток памяти перед отправкой. Я использовал аналогичный подход в предыдущих проектах, но я использовал синапс для передачи данных... но основная концепция была та же.
Модуль zlib (включенный в CodeGear) содержит простую обертку вокруг потока, которая обеспечивает сжатие и распаковку. Поскольку вы контролируете обе стороны провода, сжатие, скорее всего, повысит производительность за счет сокращения времени соединения.