PB环境下分布式应用程序的开发

一、分布式应用程序概述

分布式系统的出现源于传统的C/S结构的若干弊病,如效率低,安全性差等,结合到数据库方面来说,全球的DNS(域名解析系统)系统是一个很典型的例子,试想如果把全世界所有的域名都集中到一台服务器中来进行管理,那服务器肯定会因负载过重而无法正常工作,整个互联网也就瘫痪了。

在编写C/S结构的数据库应用系统时,同样也会遇到这类问题,那就是如果客户数量很多,数据量又都很大的情况下,服务器的负载就会很重,而且重复性工作很多,因为很多客户发出的查询可能完全相同而服务器却需要一一进行查询;同时查询算法存储于客户端,这可能不适合一些商业环境,因为算法本身可能是需要保密的。如果能够在传统的服务器和客户机之间再加一个服务器用于存储查询算法和临时查询结果,则以上问题均得到了解决。这正是分布式系统的工作原理。

二、在PB环境下如何进行分布式应用程序的开发

下图是分布式系统的工作原理图:

图(一)

首先,分布式服务器必须建立与数据库服务器的连接,可以通过ODBC接口来实现,本文不在叙述,下面要讲述客户端如何通过分布式服务器来访问数据。

在PB环境下要实现分布式的编程,首先在DTS端,需要用到两个对象,一个TransPort对象和一个不可视的用户对象(Classà Custom,Nonvisible Object,以下简称NVO),其中TransPort对象用于响应客户端的连接请求,NVO对象用于和客户端进行实际的数据传输。在客户端也需要用到两个对象,分别是Connection对象和代理对象(NVO-Proxy),其中Connection对象用于建立到DTS的连接,NVO-Proxy实际上是与NVO一一对应的,它只是NVO的一个代理,在客户端通过此代理对象来调用NVO的函数来实现相关功能。
以下是TransPort对象和Connection对象的常用属性及方法:

1、TransPort对象

属性:

Driver:可选的值有四个,分别是WinSock、NamedPipes、OpenClientServer和Local,由于Winsock的通用性,一般情况下都选择Winsock。

Application:对于Winsock而言指的是端口号,用户可以任意指定,但必须大于4096。

方法:

Listen():其调用方法是transport.Listen(),即开始监听,如果调用成功则返回0。

StopListening():其调用方法是transport.StopListening(),即结束监听,如果调用成功则返回0。

2、Connection对象

属性:

Driver:与Transport对象相同

Application:与Transport对象相同,但要注意两者必须一致。

Location:DTS的IP地址

方法:

ConnectToServer():其调用方法是connection.ConnectToServer(),即连接DTS,如果调用成功则返回0,显然在调用该函数之前,DTS必须处于监听状态。

DisconnectServer():其调用方法是connection.DisconnectServer ( ),即断开与DTS的连接。

CreateInstance():其调用方法是connection.CreateInstance(variable),即建立一个NVO的代理以便调用NVO的相关函数。注意在调用该函数之前,必须保证客户端已经与DTS建立了连接。

对于NVO和NVO-Proxy对象,在DTS中建好NVO后,为了在客户端设置其代理,可以先在DTS中设置本地代理,然后将此代理输出到客户端。具体设置方法如下:在PB的用户对象画板中,在用户对象上点击鼠标右健,选择"Set Proxy Name",输入代理对象的名称并存盘,打开PB的Library画板,找到刚才保存的代理对象,点击鼠标右健并选择"Export…"将此代理对象保存成文件,最后在客户端将此文件导入即可。导入以后,在客户端就可以通过此代理对象来调用NVO的函数了。

时间: 2025-01-01 04:37:32

PB环境下分布式应用程序的开发的相关文章

多线程问题-一个linux环境下C的多线程开发的问题

问题描述 一个linux环境下C的多线程开发的问题 大家好! 我现在做的一个课题,是基于liunx环境下用C开发的.模型属于经典的生产者消费者模型,有一个生产者线程会根据接收的外部消息产生相应的任务放入缓存池,消费者再从缓存池中取任务处理.我的程序里消费者线程一开始是被阻塞的,生产者产生一个任务后会唤醒消费者,然后消费者进入循环,只要缓存池不空就处理,缓存池就是一个环形队列. 调试程序的时候发现程序会让生产者线程接连接收好几条消息然后产生好几条任务后(最多的有十几条),消费者线程才能运行,而不是

如何在ARM linux嵌入式环境下配置Arduino的开发环境

问题描述 如何在ARM linux嵌入式环境下配置Arduino的开发环境 因为某些原因需要在ARM linux下设置一个arduino的开发环境,需要在获得代码之后将代码编译并且将代码下载到板子上.之前我有看到过arduino官网上有放出linux32 的源程序,不知道支不支持arm环境,还是要通过源代码编译文件后才能用? 解决方案 你改一下它的MakeFile,把gcc改成交叉编译试试~

link环境下,我想开发一款《订餐软件》,请问方案的选型是怎样的?

问题描述 link环境下,我想开发一款<订餐软件>,请问方案的选型是怎样的? link环境下,我想开发一款<订餐软件>,请问方案的选型是怎样的? 解决方案 这个不是几句话可以说清楚的,你需要前端.后端等一堆软件.如果你什么都不会,还是雇人帮你吧.

公有云环境下应用程序的自动化部署与水平扩展问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1690176 先介绍了一下公有云计算环境下的一些特点,再根据这些特点探讨一下作为云计算用户而言,如何对应用程序做好自动化部署和水平扩展(弹性计算)的问题.阅读本文需要有一定的云计算知识.开发运维知识. 公有云环境的优势及其特点 公有云为企业用户或个人用户(以下统称为用户)可提供三种服务,基础服务.应用服务和运维服务.

Win32环境下的程序崩溃异常定位

1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的"名言",恐怕是程序员最怕见也最常见的东西了. 在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现程序崩溃并不可怕,反而是测试的成功.作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正. 本文描述了自己总结的几种定位崩溃

vc 环境下的程序 高配电脑不兼容

问题描述 在vc2003和vc2008下写的程序,在windowxp的不同配制的电脑上使用时,配制高点的电脑报错,主要是用new申请内存时报错,但在*.exe的属性中的兼容性中,把兼容模式勾选,并选用Windows2000时,问题临时解决了.不知道这是什么原因?有没有更好的解决方法? 解决方案 解决方案二:编译问题.注意编译选项

在有VS的环境下,程序能正常运行,没有的情况下会报错(都有.net framework4.0环境),错误日志如下

问题描述 日志名称:Application来源:.NETRuntime日期:2/28/159:24:46PM事件ID:1026任务类别:无级别:错误关键字:经典用户:暂缺计算机:VICTORMBFF5描述:应用程序:GUIApplication.exeFramework版本:v4.0.30319说明:由于未经处理的异常,进程终止.异常信息:System.Windows.Markup.XamlParseException堆栈:在System.Windows.Markup.WpfXamlLoader

WEB环境下办公自动化文档修改痕迹保留的实现

web WEB环境下办公自动化文档修改痕迹保留的实现 一.痕迹保留的现状与思考 随着政府机关和许多企事业单位网络建设逐步完成,对于在如何利用网络,如何表现出网络的优势方面,用户最容易想到,同时也是最容易产生效果的应用,就是办公自动化系统(OA).在当前的软件开发实践中,B/S模式(浏览器/服务器模式)的开发可以采用三层结构,前端服务层.中间业务层.后台数据库.由于其扩展性好,数据安全性高,同时无须考虑客户端的兼容性,解决了C/S模式二层结构的诸多局限性,因而在办公自动化系统中得到了广泛的应用.

win8环境下vs2010老是未响应求解决方法

问题描述 win8环境下用vs2010进行开发老是未响应,求大神们提供解决办法最好是详细点 解决方案 解决方案二:这个未响应的问题,涉及的东西,太大了.系统硬件配置拉不动,导致响应不过来最常见.系统内存不大,打开的软件多......解决方案三:换2012.2013换台电脑解决方案四:系统问题也有可能解决方案五:如果刚安装就出现这个问题,那就升级电脑或则重装系统吧.如果是安装了很久,最近才出现这个问题的,禁用某些扩展试试.