`
az7772010
  • 浏览: 229126 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

delphiDIOCP开源项目连接池

 
阅读更多

https://git.oschina.net/ymofen/diocp-samples/tree/master/Common

转:http://www.cnblogs.com/DKSoft/archive/2013/06/09/3127886.html

今天群里有个朋友说他们医院项目采用直连数据库,高峰时期sqlserver的连接数达到7000多,于是我准备做个用diocp做个demo,服务端用连接池。白天的时候我在想,并发如果7000个。如果用diocp做三层服务器,连接池应该在100个左右。今天晚上奋斗了一晚上,准备把测试过程中碰到的问题总结一下。

所有的代码测试代码写完后,准备开始测试,配置后服务端的连接池(config\dbpool.config)


{
   "main":   
   {
     "host": ".",
     "user": "sa",
     "password": "efsa",
     "database": "EF_DATA"
   },
}

配置中main为连接池中连接的ID<通过id获取连接>

在客户端编写测试线程


procedure TTester.Execute;
var
  lvCds:TClientDataSet;
begin
  InterlockedIncrement(__TesterCount);
  lvCds := TClientDataSet.Create(nil);
  try
    while (not self.Terminated) and (not __stop) do
    begin
      try
        FRDBOperator.clear;
        FRDBOperator.RScript.S['sql'] := FSQL;
        FRDBOperator.QueryCDS(lvCds);


      except
        on E:Exception do
        begin
          TFileLogger.instance.logErrMessage(FTesterCode + E.Message);
        end;
      end;
      //每执行一次进行异常关闭连接
      FRDBOperator.Connection.close;
    end;
    TFileLogger.instance.logDebugMessage(FTesterCode + '线程已经停止[' + TesterCode + ']');
    FConnection.close;
  finally
    InterlockedDecrement(__TesterCount);
    lvCds.Free;
  end;
end;

开始测试100,个线程,在笔记本上测试
问题来了

几下客户端就连接不上了,怎么连接都连接不上<服务端连接数为0>,关闭了客户端重新开也不行。心中一下就凉了,不会我写的iocp这么脆弱吧。

经过几个小时的折腾和写各种日志,发现服务端中工作线程和监听线程都是好好的,没有退出线程。

后来我查看网络情况发现服务端有在监听9983端口<但是telnet不通>,我发现有好多被关闭的127.0.0.1->127.0.0.1:9983的连接,但是在网络状态中可以看到,

过一段几分钟后,发现又可以连接上,估计客户端不能频繁的建立连接和关闭连接。

后来把客户端代码修改下<删除下面的代码>。发现一切正常,还好不是服务端的问题,diocp还是经的住考验。

//每执行一次进行异常关闭连接
FRDBOperator.Connection.close;

<wbr></wbr>

开启1000个客户端,不停获取数据,发现服务端连接池中最多只有7个连接,不过机器比较卡了<毕竟是笔记本>,想想我白天是多想了,diocp根据cpu的数量开启的工作线程工作线程如果是7个,连接数肯定也不会超过7个。就算客户端连接有7000个,数据库的连接数也就是7个而已。

就算有7000个连接估计同时在执行数据库的也不过就几百个而已。处理起来应该是没有问题的。明天给群里的朋友测试下。多弄几台客户端测试下

<wbr></wbr>


分享到:
评论

相关推荐

    开源数据库连接池

    其次,DBCP(Jakarta Commons DBCP)是Apache软件基金会的一个项目,它基于Jakarta Pool库构建,提供了一个数据库连接池实现。DBCP包含了BasicDataSource,一个符合JDBC3规范的DataSource实现。DBCP的优势在于其简单...

    开源数据库连接池c3p0

    开源数据库连接池c3p0是一款广泛应用于Java后端开发中的数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用的性能和响应速度。c3p0的主要功能包括连接池的创建、维护以及自动回收资源,使得多个并发...

    C#高效数据库连接池源码

    `ConnectionPool`可能是项目或类库的命名空间或类,包含实际的数据库连接池实现;`Demo`可能是一个示例应用程序,展示如何使用自定义的数据库连接池。 5. **连接池实现细节**: - **初始化**:在应用程序启动时,...

    tomcat连接池与阿里Druid连接池

    阿里 Druid 连接池是阿里巴巴开发的开源连接池,提供了高性能、可靠的数据库连接管理。下面我们将对 Tomcat 连接池和阿里 Druid 连接池进行配置和比较。 一、Tomcat 连接池配置 Tomcat 连接池配置需要在 Maven ...

    kafka生产者连接池

    3. **连接池管理**:连接池需要监控连接的状态,确保连接的有效性,当检测到连接异常时,会自动移除并重新创建新的连接。 4. **连接扩展**:当连接池中的连接被全部占用时,如果请求量持续增加,连接池可能会根据...

    Mongodb连接池for java

    描述中提到的“解决连接池不够的问题,多连接的问题”,意味着在实际项目开发中,可能会遇到因为数据库连接数量不足或者频繁创建和关闭连接导致的性能瓶颈。通过使用连接池,开发者可以在应用启动时预先分配一定数量...

    阿里巴巴的开源项目JDBC连接池、监控组件 Druid.zip

    Druid是阿里巴巴的一款java开源的为监控而生的数据库连接池组件。Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库...

    自定义JDBC连接池及常用连接池介绍

    4. Druid:阿里巴巴开源的数据库连接池,除了基本的连接池功能,还提供了监控、SQL审计、日志等功能,是许多大型互联网公司的首选。 5. Tomcat JDBC Connection Pool:Tomcat服务器自带的连接池,适用于那些不希望...

    数据库连接池以及hibernate对各种连接池的整合

    1. **C3P0**:这是一个包含JDBC 3和JDBC 2扩展规范的开源连接池,它提供了一种实现DataSources对象的方式,可以方便地与Hibernate集成。 2. **Proxool**:它是一个可以将其他类型的JDBC驱动封装进连接池的Java SQL ...

    Apache-DBCP数据库连接池

    Apache DBCP(Database Connection Pool)是Apache软件基金会下的一个开源项目,主要提供数据库连接池服务。数据库连接池在Java应用程序中扮演着重要的角色,它能够有效地管理数据库连接,提高应用性能并降低资源...

    常用开源数据库连接池 文档和源码及jar包

    是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过...

    数据库连接池代码实现

    3. **Apache DBCP** 是Apache的一个项目,提供了BasicDataSource类用于创建连接池。配置方式也是通过设置属性,然后创建DataSource对象。 在实现代码中,我们通常会有以下步骤: 1. 加载配置(如XML或properties...

    03-数据库连接池驱动_数据库连接池;驱动_

    再者,DBCP(BasicDataSource)是Apache Commons DBCP项目的一部分,它是基于Jakarta-Commons-Pool的数据库连接池实现。DBCP提供了基本的连接池功能,如连接池大小控制、空闲连接检测等。相对于C3P0和Druid,DBCP...

    数据库连接池案例包括c3p0,druid,和自己手写的连接池

    其次,Druid是阿里巴巴开源的数据库连接池组件,它不仅提供了基本的连接池功能,还集成了监控、日志、SQL解析等功能,使得数据库操作更加透明化。Druid的特点在于其强大的监控能力,可以实时查看连接池状态、SQL执行...

    java连接池proxool

    Proxool是Apache软件基金会开发的一个开源数据库连接池实现,它提供了一种灵活且可配置的方式来管理数据库连接资源。 首先,让我们深入理解什么是Java连接池。在Java编程中,JDBC(Java Database Connectivity)...

    druid.rar阿里巴巴开源数据库连接池

    Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能.它可以替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可...

    连接池源码和视频教程

    - Druid:阿里巴巴开源的数据库连接池,除了基本的连接池功能外,还提供了监控、日志、拦截器等功能,便于对数据库访问进行诊断和优化。 4. 使用步骤: - 引入依赖:在项目中引入对应连接池的jar包或Maven/Gradle...

    Java 连接池实现

    - **Druid**:阿里巴巴开源的连接池,提供了监控、日志、拦截器等功能,适合大型分布式系统。 在实际开发中,我们通常通过Spring框架来集成和管理这些连接池。Spring提供了DataSource接口,允许我们配置不同的连接...

    德鲁伊-连接池jar包.zip

    德鲁伊(Druid)是阿里巴巴开源的一个高效、强大的数据库连接池组件,它不仅提供了数据库连接池的功能,还集成了监控、SQL解析、性能优化等多种功能。在Java开发中,数据库连接池是不可或缺的一部分,它能有效地管理...

    用apache的dbcp建立数据库连接池

    Apache DBCP(Database Connection Pool)是Apache组织提供的一款开源的数据库连接池组件,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。在Java应用程序中,使用DBCP可以帮助我们减少频繁创建和...

Global site tag (gtag.js) - Google Analytics