77范文网 - 专业文章范例文档资料分享平台

数据集连接池(2)

来源:网络收集 时间:2020-08-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

数据集连接池的创建

dbconn : TadoConnection; begin

if ListofConnection.ContainsKey(TDSSessionManager.GetThreadSession.Id) then Result := ListofConnection[TDSSessionManager.GetThreadSession.Id] else begin

if ListofConnection.Count <= g_MaxPoolSize then begin

dbconn := TadoConnection.Create(Self);

dbconn.Name := 'con'+ IntToStr(TDSSessionManager.GetThreadSession.Id); dbconn.LoginPrompt := false;

dbconn.ConnectionString := 'FILE NAME=' + extractfilepath(application.ExeName) + 'connect.udl'; ListofConnection.Add(TDSSessionManager.GetThreadSession.Id, dbconn); Result := dbconn; end; end; end; end.

datasnap 2010 DataSnap服务器如何得到客户端的IP和端口 .

2011-07-10 22:31

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。

在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果奉献给大家,免得大家在花时间研究这个。

另外,通过研究发现,DSConnectEventObject.ChannelInfo.Id 属性实际上是内存地址,并不是一个简单的数字。

以下代码红色部分是关键。

uses IdTCPConnection; ......

procedure TServerContainer1.DSServer1Connect (DSConnectEventObject: TDSConnectEventObject); var

6 / 8

数据集连接池的创建

ClientConnection: TIdTCPConnection; begin

with Form1 do begin

dsShowDataSet.Append;

dsShowDataSet['ClientConnectTime'] := Now;

if DSConnectEventObject.ChannelInfo <> nil then begin

ClientConnection := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);

dsShowDataSet['ClientID'] := DSConnectEventObject.ChannelInfo.Id; dsShowDataSet['ClientIP'] := ClientConnection.Socket.Binding.PeerIP + ':' + IntToStr(ClientConnection.Socket.Binding.PeerPort);

dsShowDataSet['ServerIP'] := ClientConnection.Socket.Binding.IP + ':' + IntToStr(ClientConnection.Socket.Binding.Port); end;

dsShowDataSet['ClientUserName'] := DSConnectEventObject.ConnectProperties [TDBXPropertyNames.UserName]; dsShowDataSet['ClientUserPassword'] :=

DSConnectEventObject.ConnectProperties[TDBXPropertyNames.Password]; dsShowDataSet['ServerInfo'] := DSConnectEventObject.ConnectProperties [TDBXPropertyNames.ServerConnection]; dsShowDataSet.Post; end; end;

Lifecycle 三种属性: Session、Invocation、Server

如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!

下面我对这三种属性的使用环境逐一介绍:

1. Session

说明:这是delphi2010中默认属性,也是delphi推荐设置。Session会为每个来自客户端的链接,建立一个线程来实例化。实例化是什么概念呢?就是这个线程把所有你将要用到的类、函数等等都建立好了,等待你客户端直接使用。这个线程和实例化并不释放,直到客户端中断连接。如果有300个客户端,那么你的服务器将会有300线程和实例,对服务器硬件和内存是个考验。

适用环境:这个设置是线程安全的!

7 / 8

数据集连接池的创建

客户端数量少,每台服务器不超过连接数量: 200 x CPU个数 x (每个CPU核数x0.7) (这是经验值,稳定连接的数量,不是极限数量,别误解^_^),内存现在很便宜了,想加多大就多大!客户端频繁调用服务器数据,无论连接数量是多少,最好都用这种设置。如果客户端很多,建议采用负载平衡和多台服务器来解决。

2. Invocation

说明:服务器只是建立连接,但是先不做实例化,只有当客户端请求功能的时候,服务器才开线程并实例化,当客户端用完后,服务器就释放线程和实例。

适用环境:这个设置是线程安全的!

如果客户端调用服务器数据频率低,这种方法很不错,会节约很多内存。

3. Server

说明:服务器对所有客户端连接使用一个实例,不是线程安全的。所以要自己控制客户端并发调用的问题(可以使用互斥、原子量等方法),让客户端的调用排成一队使用服务器资源。

适用环境:这个设置不是线程安全的!!

配置较低的服务器服务器连接的另一端只能是单线程工作的模式

8 / 8

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库数据集连接池(2)在线全文阅读。

数据集连接池(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1144053.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: