|
ASTA was designed to be used by Delphi Database Application
developers using skill sets they already possessed. ASTA uses tcp/ip
for it's transport. Tcp/ip [1]is a protocol that maintains state and
was designed to be reliable. There are other protocols like HTTP, which
is used for browsers, but is stateless. HTTP connects and disconnects
to talk to remote hosts. Tcp/ip maintains it's connected "state".
Tcp/ip uses an IP Address and Port combined to uniquely identify a
circuit. This connection is called a socket. ASTA provides an
AstaServerSocket and AstaClientSocket to allow remote ASTA clients to
communicate with ASTA Servers.
ASTA sockets are non-blocking and event driven so they are very
responsive and scale well. Threads are used in ASTA database access on
the server in one of 3 ASTA threading models as well as optionally in
ASTA Messaging. One of ASTA design goals was "To do all threading
internally so that Developers need not be concerned with threading
issues" so all ASTA threading abilities are implemented internally by
ASTA components so that the developer doesn't really have to know
anything about threads except to choose which way you want ASTA Servers
to run.
AstaServerSocket
An ASTAServer consists of an AstaServerSocket that is connected at a
given IPAdress and Port. Only one ASTA server can run on a that
IPAdress and port. If you attempt to start up another instance of an
AstaServer on the same IPAddress and Port you will receive an error. An
AstaServerSocket, when started, will listen for remote
ASTAClientSockets and attempt to accept a connection from them. ASTA
has a number of ways to provide security for your application.
The AstaServerSocket has events and properties that abstract the
Database process and allow for any Delphi 3rd Party Database
Components to be used in an AstaServer. Currently there are 20 Delphi
3rd Party Database components supported by ASTA.
AstaClientsocket
ASTA client applications must use a TAstaClientSocket to communicate
with remote ASTA Servers. The AstaClientSocket has IPAddress and Port
properties that must be set to the same of the AstaServer that it
intends to connect to. The host property can be used instead of the
IPAddress.
To facilitate communication an AstaServerSocket must be started at
an IPAddress and port and an AstaClientSocket must be able to connect
to that AstaServerSocket via tcp/ip.
ASTA uses non-blocking event driven sockets as it's underlying
transport. These Sockets are by their nature asynchronous. This means
that a message sent by one method does not wait for any response from a
server and if a response does come it will fire an event. This is
similar to Windows messaging where you send a message to a Window
component and receive a message back in an event.
This means that by you cannot write procedure code using
non-blocking event driven sockets. To be able to write code that you
are used to write in normal Database Applications like
AstaclientDataSet1.Open;
While Not AstaClientDataSet1.Eof do
begin
// do something
AstaClientDataSet.Next;
end;
ASTA had to implement something called AstaSmartWait to allow
Database Application Developers to write procedural code. When you
initiate any Database calls from AstaClientDataSets ASTASmartWait will
eat windows messages while waiting for a response from the server to
allow you to write procedural code.
This also means that you cannot communicate with a Remote ASTA
server until after an AstaclientSocket has connected to the server. You
cannot write code in the FormCreate to open a TAstaClientSocket and
then open a TAstaClientDataSet. This will not work
AstaClientSocket1.Active := True; //async call
AstaClientDataSet1.Open; //socket has not connected to the server yet
The earliest you can communicate with an ASTA server or open a
TAstaClientDataSet to fetch data from a remote server is in the
OnConnect Method of the TAstaClientSocket.
When AstaclientDataSets are open at design time they actually are
opened on 2 occasions. The first time is in the formcreate before the
TAstaClientSocket is connected to the server. ASTA internally will note
all the AstaClientDataSets open at design time and add them to an
internal list so that after the TAstaClientSocket is connected, the
DataSets can be reopened again, and this time they will fetch data from
the remote server.
The asynchronous nature of sockets, and knowing when you can open
AstaClientDataSets are important concepts and techniques and the faster
you understand the relationship of your remote application and it's
ability to communicate with an ASTA Server, the easier it will be with
you to be productive. Depending on your connection, whether on a LAN or
over a slow dial up Internet account, the socket performance may vary
wildly but once you get the basics of the way things flow you will find
that you can write robust and brisk ASTA client applications.
|