今天同事讲起.net2005里分布式开发及负载平衡想起的
         使用delphi做三层结构,大概是2001年的事了,当时做的项目基本都采用了三层结构,现在想来还是有些好处的,几十个客户端通过应用服务器访问数据库,业务逻辑放到了应用服务器层,客户端、应用服务器、数据库服务器可以分别部署在不同的机器上。
        我们知道,每个exe执行起来后都运行在自己的进程空间中,是独立的,在同一台机器上,怎样让一个exe调用另外一个exe的方法呢?这就是我常提到的com技术,被调用的exe不再是一个简单的exe了,它不能只顾自己了,还要为别的调用提供服务,别的exe怎么知道系统里有哪些可用的对象呢?提供服务的exe必须向系统注册,我们在注册表中看到的许多天书般的长串键值就是这些对象的唯一标识。向execl、word这些软件都早不是简单的应用程序,他们都向系统注册了服务对象,你写的vb、delphi、vc等程序能简单的嵌入excel、word,其实就是在调用这些服务对象的方法。
         如上所述,com 让同台机器上的exe之间可以访问,dcom让不同机器上的exe之间可以访问。dcom是针对Windows 工作组开发的小型连接方式,并不支持tcp/ip 网络, 不支持网关。

         delphi做三层结构可以采用的连接方式有:   
         DCOM Connection
         Socket Connection
         Web Connection    
         SOAP Connection
         CORBA Connection

         我们主要看下Socket Connection和Web Connection    
        
         1、Socket Connection 通过tcp/ip传输,可任意分配多口
         delphi提供scktsrvr.exe来接收客户端的请求,为每一个客户机连接都要建立一个线程,来服务客户端
         过程如下:  
         客户端要求服务器执行一个方法,查询一个数据 -> 服务器socket -> 发送windows消息到 socketserver主线程->服务器上客户连接线程分拣消息 - > 分析数据包,找出客户要求执行的接口方法 -> com服务器,执行方法->传回第一个数据包到客户端-> 客户端发送响应给服务器 ->  服务器socket -> 发送 windows 消息到 socketserver主线程
          2、Web Connection 通过80端口的http传输躲过了网关,但速度慢,因为在WebConnection中需要对COM请求的数据进行Marshall并编码为HTTP协议所需要的文本格式,到了httpsrvr中又要把HTTP的文本转成本地COM调用。
         WebConnection调用应用服务器,如果提示"访问拒绝",请运行DComcnfg配置DCOM对象的安全启动和激活权限,为Internet来宾用户添加权限即可。同时确保httpsrvr.dll所在的文件夹的执行权限为"脚本和可执行文件"。

         两篇文章:
        1、http://borland.mblogger.cn/catchbug/posts/2927.aspx
        2、http://blog.csdn.net/cheng_ds/archive/2007/02/04/1502196.aspx

        示例代码下载
        1、TWebConnection
        2、TSockeConnection

posted on 2007-04-01 16:53  gjung  阅读(5914)  评论(0编辑  收藏  举报