请各位说一下客户端是怎么调用服务端的RDM中的接口的?(100分)

  • 主题发起人 主题发起人 saoren
  • 开始时间 开始时间
S

saoren

Unregistered / Unconfirmed
GUEST, unregistred user!
无论是Socket or COM
比如:
TSocketConnection怎么和TRemoteDataModule中的interface联系的,之间的方法是怎么调用的。
或TDComConnection
 
例如:
Socketconnection1.Connected:=ture;
Socketconnection1.AppServer.GetAllTables(vtable);
GetAllTables既是应用服务器的方法。
 
这个,好像我没说清楚,不好意思。
比如在TSocketConnection是通过TClientSocket与Server的Scktsrvr.ServerSocket进行通信
和交换数据的,在Scktsrvr中由SConnect.TDataBlockInterpreter来解析Server and Client数据调用
以及交换,那么我就是不清楚一个程序(Scktsrvr)和中间件之间它们的怎么通信的呢,Socket相对DCOM
来说,好理解一点,不像DCOM全是API调用的。
简单来说TClientSocket.SendBuf('Command') => Scktsrvr.ServerSocket.reciveBuf('Command') =>
TDataBlockInterpreter.InterpretData('Command')
InterpretData是怎么和我写的中间件联系的
像RDM中,它都有initialization部分:
TComponentFactory.Create(ComServer, TTest, Class_Test, ciMultiInstance, tmApartment);
这玩意到底有什么用,和Server的Scktsrvr有什么用
 
没有深究
 
其实对于 SocketConnection ,它是通过ScktSrvr.exe来连接真正的应用服务器,即:
SocketServer 是个代理服务器。saoren 说的对,过程就是:
TClientSocket.SendBuf('Command') => Scktsrvr.ServerSocket.reciveBuf('Command') =>
TDataBlockInterpreter.InterpretData('Command')
在 InterpretData 过程中就包含了对于数据的解释,包括连接,传送接口等。
请看下面的代码:
case (Action and asMask) of
asInvoke:do
Invoke(Data);
asGetID:do
GetIDsOfNames(Data);
asCreateObject:do
CreateObject(Data);
//创建对象,即:应用服务器
asFreeObject:do
FreeObject(Data);
// 释放对象
asGetServers:do
GetServerList(Data);
asGetAppServers:do
GetAppServerList(Data);
else
if notdo
CustomAction(Action and asMask, Data) then
raise EInterpreterError.CreateResFmt(@SInvalidAction, [Action and asMask]);
end;

通过定义命令,由SocketServer 结实执行。
 
不好意思,应该是“通过定义命令,由SocketServer 解释[结实]执行”
 
多人接受答案了。
 
后退
顶部