delphidatasnap工作顺序预览.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DataSnap探询在XE3中,我们可以考滤用DataSnap开发多层应用。本记录主要查看DataSnap服务端连接及断开事件,这样能更好的理解服务端如何进行控制,即主要了解以下图中几个控件的事件触发顺序。以上几个控件作用说明:? DSSerever:提供基本的DataSnap服务功能? DSTCPServerTransport:提供TCP/IP通讯协议的支持,http(s)用不上? DSHTTPService:提供http(s)通讯协议和RESTFUL架构的基本支持? DSAuthenticationManager:提供安全认证的功能? DSServerClass:提供自动输出的服务端类别让客户端调用的基本功能,它是TDSServerModule的类别?以下为实例的服务端和客户端截图:服务端:客户端:以下为分别为远程连接和断开时的事件顺序图,如果不是tcp/ip协议,则服务端不会执行DSTCPServerTransport的事件。?远程连接事件执行顺序?远程断开执行顺序后记:??? 根据以上的顺序,我们在开发服务端时可以在服务端建立数据库连接池,在DSServer的连接事件中一给用户分配数据库的连接,在断开事件中把分配给用户的数据库连接放回连接池即可。?? 在用到DSTCPServerTransport的心跳包时,发现如果是tcp/ip连接协议,在心跳包的特定时间内没有回应时,服务端会自动调用DSTCPServerTranspor的DisConnect事件,但不会执行DSServer的disconnect.而http则没有什么反应。综上所述,我们在开发中间层时,在DSServer中给用户分配数据库连接池,可以把sqlconnection\adoconnection\uniconnection等连接的控件放在ServerContainer窗体中,其它的连接控件如uniDataSet\AdoDataSet\DataSetProvider等放在TServerMethods(TDSServerModule)的窗体上.客户端在连接时最好在调用某个事件时就打开客户端的sqlconnection,调用完后就断开客户端的sqlconnection即可。服务端的最大连接数与cpu有关系,好像是200*cup的核数*系数?以上不对的地方请指正源码地址:/detail/yagzh2000/5294600DataSnap的CallBackDataSnap可以用TDBXCallBack的类进行服务端和客户端以及客户端与客户端之间的通信。在进行通信时要用到以下标识服务端与客户端通信:??? 1.通道???? 2.客户端注册的回叫标识客户端与客户端通信:?? 1.通道?? 2.客户端注册的回叫标识?? 3.客户端标识一个客户端一般只需要一个通道即可,一个通道可以注册多个客户端回叫标识,客户端标识主要用于客户端通信开发时大体的步骤有以下几点:1.服务端???? 用DSServer的BroadcastMessage函数进行发送信息function BroadcastMessage(const ChannelName: string; const Msg: TJSONValue; const ArgType: Integer = TDBXCallback.ArgJson): Boolean; overload;function BroadcastMessage(const ChannelName: string; const CallbackId: string; const Msg: TJSONValue; const ArgType: Integer = TDBXCallback.ArgJson): Boolean; overload;第一个函数时向ChannelName通道的所有在线客户端发送信息,第二个函数时向ChannelName通道的CallBackID的客户端发送信息,Msg是要发送的信息载体。2.客户端? 主要用到了TDSClientCallbackChannelManager类和TDSAdminClient类(DSProxy单元)及TDBXCallBack类。? 1).在工具箱是拖动DSClientCallbackChannelManager控件到窗体上,设置它的channelName\DSHostName\CommuncationProtocol\DSPort\ManagerID属性等,然后用它的RegisterCallback事件向服务器注册回叫标识即可。?2) TDSAdminClient类主要用于向其它客户端发送信息,主要用到此类的NotifyCallback函数function NotifyCallback(ClientId:

文档评论(0)

奇缘之旅 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档