请问Delphi IntraWeb程序自带的服务器最多能容纳多少在线用户链接?

请问Delphi IntraWeb程序自带的服务器最多能容纳多少在线用户链接?,第1张

intraweb是借助于vcl的底层类库,其实起目的是作为winform的补充,而不是作为web服务来用的
至于并发数,在线用户数要看你的数据库配置(数据库并发),服务器算法,服务器配置等,而且用了vcl就要跑在win上,就要相对应的做一些服务器优化和安全防护
实际测试中intraweb的并发量是低于aspnet,相同配置的情况下,一台志强 22G,数据库用sqlserver的在线用户数是750-1200的,要看你的页面内容,比如数据库交互频繁的并发量就要相对低一些,如果要做web应用,建议用专业的web开发工具,像php,aspnet等如果是作为项目的补充用到一部分web管理可以考虑用intraweb

GetDatabaseNames方法

声明 procedure GetDatabaseNames(List: TStrings)

GetDatabaseNames方法清除List的内容并将所有BDE别名和应用程序定义的别名的名字写入List

GetDriverNames方法

声明 procedure GetDriverNames(List: TStrings)

GetDriverNames方法清除List中的内容 并将BDE当前安装的驱动程序名写入List

GetDriverParams方法

声明 procedure GetDriverParams(const DriverName: String; List: TStrings)

GetDriverParams方法消除List中的内容 并将名为DriveName驱动程序缺省参数写入List

GetTableNames方法

声明 procedure GetTableNames(const DatabaseName Pattern: Strings;

Extensions SystemTable: Boolean; List: TStrings)

GetTableNames方法消除List中的内容 并将名为DatabaseName的数据库中的所有表的名字写入List Pattern参数将限制表名 对于SQL服务器 将SystemeTables设为True将获取系统表和用户表 对非SQL数据库 将Extensions设为True将在表名中包含扩展名

处理Client/Server事务控制

使用隐式控制和显示控制的数据库应用中有两种方法管理事务控制

● 运用TDatabase部件的属性和方法进行显式控制

● 运用TQuery部件的传递式SQL控制事务

Delphi还支持Paradox和dBASE表的局部事务处理

事务控制概述

当用Delphi创建数据库应用时 Delphi提供了用为所有数据库访问的事务控制

事务是这样一组 *** 作 在被提交前 它们对一个或多个数据库的 *** 作 必须全部执行成功 如果其中一个 *** 作失败 则所有 *** 作失败 即事务具有原子性

即使发生硬件失败 事务也要保证数据库一致性 当允许多用户并发访问时 事务还要维持数据完整性

例如 一个应用程序可能更新ORDERS表以指明接受购买某一项目的定单 那么也要更新INNENTORY表以反映库存的减少 如果在第一个更新之后 第二个更新之前发生硬件错误 数据库就会处于不一致状态 因为库存情况没有反映定单情况 在事务控制下 两个表达式将在同一时间提交 如果其中一个表达式失败 则被返转(Rolled Back)

使用隐式控制

在缺省情况下 Delphi通过BDE为应用程序提供隐式事务控制 当应用程序处于隐式事务控制时Delphi为DataSet中的写每个记录进行隐式事务控制 它提交每一个独立的写 *** 作 如Post和Append Record

使用隐式事务控制是容易的 它保证最小的记录更新冲突和数据库的一致性视图 另一方面 因为写入数据库的数据的每一行都要进行事务控制 所以隐式事务控制将导致网络过忙和应用程序性能下降

如果采用显式事务控制 就能选择最有效的时机来开始 提交和终止事务 特别是在开发多用户环境下的客户应用程序运行访问远程SQL服务器 就更应该采用显式控制

使用显式事务控制

有两种协作又独立的方式可运用于Delphi数据库应用的事务控制

● 使用TDatabase部件的方法和属性

● 使用TQuery部件中的传递式SQL 这种方式只有在Delphi Client/Server Suite版中才有效 SQL Links将SQL表达式直接传给过程SQL或ODBC服务器

使用TDatabase部件的方法和属性的好处是提供了清晰的 轻便的 与特定数据库或服务器无关的应用能力

使用传递式SQL的主要好处在于可以运用特定服务器的先进事务管理能力

使用TDatabase的方法和属性

下表中列出了TDatabase部件中用于事务管理的方法和属性以及它们的使用方法

表 TDatabase用于事务显式控制的方法表

━━━━━━━━━━━━━━━━━━━━━━━━

方法或属性      作 用

────────────────────────

Commit 提交数据的修改并终止事务

Rollback 取消数据的修改并终止事务

StartTransaction 开始一个事务

TransIsolation 表述事务的独立性级别

━━━━━━━━━━━━━━━━━━━━━━━━

StartTransaction Commit和Rollback是供应用程序在运行时调用开始事务 控制事务并且保存或放弃所做数据修改的方法

TransIsolation是TDatabase部件的用于控制作用于相同表的不同事务之间如何交互的属性

⑴ 开始一个事务

当你开始一个事务时 后来的所有读写数据库的表达式都发生在那次事务的环境中 每个表达式都是其中一部分 任何表达式所做的修改 要么成功地提交给数据库 要么每一个修改都被取消 考虑一个在ATM上的银行传输问题 当顾客决定将钱从存款帐户转到支付帐户时 在银行数据库记录上必须发生两个修改

● 存款帐户必须记入借方

● 支付帐户必须记入贷方

如果出于某种原因 其中的一个 *** 作不能被完成 那么任何一个 *** 作都不应该发生 因为这些 *** 作是相关的 它们应该发生在同一个事务中

为了开始Delphi应用程序中的一个事务 需要调用TDatabase部件中的StartTransaction方法

DatabaseInterBase StartTransaction;

此后的所有数据 *** 作都发生在最近一个事务的环境中 直到该次事务通过调用Commit或Rollback显式地终止为止

那么 应当将事务保持多久呢?理想状态下 只要需要 多久都行 事务的活跃状态越长 同时访问数据库的用户越多 在你的事务的生命其中 更多的并发 同时的事务开始和终止 于是当试图提交修改时 与其它事务冲突的可能性更大

⑵ 提交一个事务

为了做永久性修改 事务必须使用TDatabase部件的Commit方法提交 执行提交表达式将保存数据库的修改并终止事务 例如 下列表达式将终止在上例中开始的事务

DatabaseInterBase Commit

Commit的调用应当置于try…except表达式中 如果一个事务不能成功提交 你就能处理错误 并重试 *** 作

⑶ 返转一个事务

为了取消数据库修改 必须用Rollback方法返转一个事务 Rollback 复原一个事务的修改 并终止事务 例如 下列表达式将返转一个事务

DatabaseInterBase Rollback;

Rollback通常发生在

● 异常处理代码

● 按钮或菜单事件代码 如用户点按了Cancel按钮

⑷ 使用TransIsolation属性

TransIsolation属性描述TDatabase部件事务的独立级别 事务的独立级别决定了事务与其它作用于相同表的事务是如何相互作用的 在改变或设置TransIsolation 的值之前 应当相当熟悉Delphi中的事务和事务管理

TransIsolation的缺省值是tiReadCommitted 下表中总结了TransIsolation的可能值并描述了它们的含义

表 TransIsolation属性值的含义

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

独立级别         含 义

──────────────────────────────────────

tiDirtyRead 允许读由其它同时事务写入数据库的未提交的修改 未提交的修改不是永久性的 可能在任何时候被复原 在这个级别你的事务与其它事务所做的修改具有最低独立度

tiReadCommitted 只允许读由其它同时事务提交的数据库修改 这是缺省的独立级别

   iRepeatableRead 允许单个的数据库读事务无法看见其它同时事务对相同数据做的修改 这个独立级别保证了你的事务一次读一个记录 记录的视图不会改变 在这个级别你的事务与其它事务做的修改完全独立

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

各种数据库服务器不同程度地支持这些独立级别 有的根本不支持 如果请求的隔离级别不被服务器支持 Delphi将采用更高的独立级别 各种服务器支持的独立级别请参见表

如果应用程序使用ODBC与服务器交互 ODBC驱动程序必须支持独立级别

使用传递式SQL

为了能使用传递式SQL控制事物 必须

● 使用Delphi Client/Server Suite

● 安装正确的SQL Links驱动程序

● 正确配置网络协议

● 访问远程服务器上数据库的能力

● 用BDE配置工具将SQLPASSTHROUGH MODE设置为NOT SHARED

通过传递式SQL 你可以使用TQuery TStoredProc 或TUpdateSQL部件直接发送一个SQL事务控制表达式给远程数据库服务器 BDE本身并不处理SQL表达式 采用传递式SQL可使用户直接获得SQL服务器提供了事务控制优点 尤其是当那些控制是非标准的时

SQL PASS THROUGHMODE 描述BDE和传递式SQL是否共享相同的数据库联接 在大多数情况下 SQLPASSTHROUGHMODE被设置SHARED AUTOMIT 然而 如果你想将SQL事务控制传递给服务器 你就必须用BDE配置工具 将BDE的SQLPASSTHROUGHMODE 设置为NOT SHARED 此外 还必须为传递SQL事务控制表达式的TQuery部件建立独立的TDatabase 部件

使用本地事务

BDE还支持Paradox和dBASE上的本地事务 从代码角度而言 在本地事务和远程数据库服务器的事务之间没有什么差别

当作用于本地数据库表的事务开始时 更新 *** 作被记录在日志中 每个日志记录包含旧的记录缓冲区 当事务处于活跃状态 更新的记录被锁定 直到事务被提交或返转 在返转过程中 旧的记录被应用于将更新的记录恢复到原先的状态

使用存储过程

TStoredProc部件概述

存储过程是以数据库服务器为基础的接受输入参数 并将结果返回给应用程序的一段程序 TStoredProc部件 *** 作远程服务器上的数据库中的存储过程 存储过程是一连串表达式的集合 作为服务器的一部分存储 存储过程在服务器上执行一系列重复性的与数据库相关的任务 并将结果传给客户应用程序 如Delphi数据库应用程序

TStaredProc部件使Delphi数据库应用程序能执行服务器上的存储过程

通常 作用于数据库表中大量记录并且使用统计或数学函数的 *** 作都是存储过程的首选对象 通过将这些重复计算任务转移到服务器 可以提高数据库应用程序的性能

● 充分利用服务器的处理能力和速度

● 减少网络传输的数量

例如 考虑一个需要计算单个值的应用程序 在大批记录中的标准差值 如果在Delphi应用程序中执行这项功能就必须从服务器中得到所有在计算中用到的记录 这必将导致网络拥塞 因为应用程序所需的只是代表标准差的最终返回值 因此 由服务器上的存储过程来读数据 执行计算和将值传给应用程序将更有效

lishixinzhi/Article/program/Delphi/201311/25131

你有没有用DELPHI开发Internet程序?是不是常常会烦恼FastNet组件为什么没有源代码?有很多问题 不看源代码 真不知道是什么问题 是不是也觉得FastNet组件支持的网络协议还不够多?现在不用烦恼了 有一套功能很丰富 使用很方便 开放源代码的免费INTERNET控件集可以解决你的烦恼 这套控件集就是INDY了

什么是INDY?它有什么功能?怎么用?就让我慢慢道来

INDY的全名是Internet Direct(也叫Winshoes) 它是一套开放源代码的Internet控件集 它支持大部分流行的Internet协议 包括TCP UDP DNS ICMP FINGER FTP GOPHER >

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/13414782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存