Topic: Socket connection有必要用connection pool吗?

  Print this page

1.Socket connection有必要用connection pool吗? Copy to clipboard
Posted by: enoch
Posted on: 2003-07-05 10:31

RT,指的是Socket的客户端

2.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: jameszhang
Posted on: 2003-07-05 11:54

应该看需求来讨论,呵呵

3.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-07-24 15:51

有没有必要使用Pool取决于你的需求,例如,server端希望client维持一定数量的长连接时,或者重建连接代价很大时,都可以考虑使用Pool来缓存连接。我们的一个项目中已经有这种需求和实现。

4.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: iwtg
Posted on: 2003-07-28 16:33

同意楼上的。

例如:联众的游戏网,如果没有pool 技术的支持,那不是要用海量巨型计算机来支持来自客户的请求>

5.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: imote
Posted on: 2003-07-29 09:49

客户端不需要使用pool吧,只有提供服务的server对此的需求才比较多。一般来说,客户端一个socket连接就应该能搞定问题了。

6.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: sanigo
Posted on: 2003-07-29 10:26

谁能贴个实现,让兄弟看看?

7.Re:Socket connection有必要用connection pool吗? [Re: imote] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-07-31 09:23

imote wrote:
客户端不需要使用pool吧,只有提供服务的server对此的需求才比较多。一般来说,客户端一个socket连接就应该能搞定问题了。


不是这样的,客户端是一个相对的概念。例如你写一个基于数据库的应用,你的应用对于用户来说是服务端,但是相对于数据库来说就是客户端,数据库连接池是存在于客户端的。
又例如写一个网上短信的应用,你的应用相对于用户是服务端,而相对于短信网关或短信中心来说是客户端。Socket Pool存在于短信中心或短信网关的客户端——你的应用中。

8.Re:Socket connection有必要用connection pool吗? [Re: sanigo] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-07-31 10:09

sanigo wrote:
谁能贴个实现,让兄弟看看?


兄弟,去apache.org看看,有开源的apache jakarta project,其中有Common pool,实现了一个通用池。
http://jakarta.apache.org/commons/pool/

9.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: scottlai
Posted on: 2003-07-31 10:58

speeddemon wrote:
兄弟,去apache.org看看,有开源的apache jakarta project,其中有Common pool,实现了一个通用池。
http://jakarta.apache.org/commons/pool/

兄弟. 重點在: Is socket poolable?

10.Re:Socket connection有必要用connection pool吗? [Re: scottlai] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-07-31 12:00

scottlai wrote:
兄弟. 重點在: Is socket poolable?


兄弟,完全可以,我已经说过,我们已经有实现并且正在使用。
我们的情况是这样的,必须与某电信运营商的营帐系统连接,按照特定协议完成某些操作。最初的作法是使用短连接,即需要时建立,完成操作后立即释放。后来发现因为某些原因,建立连接的开销很大(操作前需要认证),导致我们的应用相应速度较慢。分析后决定采用连接池,建立连接并认证后,将socket缓存到池中,池负责维护socket的有效性(通过发送keepalive包),并维护连接的生命周期(定期重建)。事实证明,这样做极大的提高了应用的效率,带来的速度提升有两个数量级以上!
因为一些商业原因我不能指明应用场合和贴出源代码,有兴趣可以在这里讨论实现原理和步骤。

11.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: scottlai
Posted on: 2003-08-01 03:06

speeddemon wrote:
兄弟,完全可以,我已经说过,我们已经有实现并且正在使用。
我们的情况是这样的,必须与某电信运营商的营帐系统连接,按照特定协议完成某些操作。最初的作法是使用短连接,即需要时建立,完成操作后立即释放。后来发现因为某些原因,建立连接的开销很大(操作前需要认证),导致我们的应用相应速度较慢。分析后决定采用连接池,建立连接并认证后,将socket缓存到池中,池负责维护socket的有效性(通过发送keepalive包),并维护连接的生命周期(定期重建)。事实证明,这样做极大的提高了应用的效率,带来的速度提升有两个数量级以上!
因为一些商业原因我不能指明应用场合和贴出源代码,有兴趣可以在这里讨论实现原理和步骤。

那應該是SOCKET沒CLOSE吧? JAVA SOCKET CLOSE還能REUSE??

12.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: rainman
Posted on: 2003-08-01 05:36

socket 有TCP和UDP 两种连接。如果面向无连接的话,偶觉得可以用消息队列或其他异步方法一个socket多用。用pool的话有时候也有点浪费吧。

13.Re:Socket connection有必要用connection pool吗? [Re: scottlai] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-08-01 10:27

scottlai wrote:
那應該是SOCKET沒CLOSE吧? JAVA SOCKET CLOSE還能REUSE??

谁说Close了?当然不能Close,只是放回池中,由池来维护——“池负责维护socket的有效性(通过发送keepalive包),并维护连接的生命周期(定期重建)”——没看到吗?

数据库连接池,不知大家用过没有?一样的道理啊!

14.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: scottlai
Posted on: 2003-08-01 11:31

speeddemon wrote:
谁说Close了?当然不能Close,只是放回池中,由池来维护——“池负责维护socket的有效性(通过发送keepalive包),并维护连接的生命周期(定期重建)”——没看到吗?

数据库连接池,不知大家用过没有?一样的道理啊!

原來是沒COSE掉啊.
這樣就了解了. 正在納悶SOCKET CLOSE就斷了.怎麼POOL啊...

15.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: enoch
Posted on: 2003-08-04 12:23

speeddemon wrote:
兄弟,完全可以,我已经说过,我们已经有实现并且正在使用。
我们的情况是这样的,必须与某电信运营商的营帐系统连接,按照特定协议完成某些操作。最初的作法是使用短连接,即需要时建立,完成操作后立即释放。后来发现因为某些原因,建立连接的开销很大(操作前需要认证),导致我们的应用相应速度较慢。分析后决定采用连接池,建立连接并认证后,将socket缓存到池中,池负责维护socket的有效性(通过发送keepalive包),并维护连接的生命周期(定期重建)。事实证明,这样做极大的提高了应用的效率,带来的速度提升有两个数量级以上!
因为一些商业原因我不能指明应用场合和贴出源代码,有兴趣可以在这里讨论实现原理和步骤。


终于有人说到点子上了,我提问的原因就是在些,这位兄台说的是CMPP吧Cool

16.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-08-04 16:38

呵呵,不是CMPP,也不是SGIP或SMPP,跟短信没关系。
我们连的是营帐,不是短信网关或短信中心。

17.Re:Socket connection有必要用connection pool吗? [Re: enoch] Copy to clipboard
Posted by: felexs
Posted on: 2003-08-07 17:24

是否需要连接池主要看需求。
如果你提及的营帐系统和应用是一个厂商开发的,那么这种方式显然是地效、自找麻烦的。此时client与server只需一个长连接,保持连接的心跳侦测,在连接上发送消息包即可。(可能大家都知道,废话了)。

在与一个已有系统对接时,该系统只能接收断连接(比如该系统是通过SERVLET接受请求的),此时client端要提高性能,连接池当然需要,这个连接池在系统总开销上并没有节省,是典型的以空间换时间。

去年(当时我还在国内一家电信设备制造商)开发一套数据业务平台时,就碰到过上述问题。

实现方法关键在于如何换开销。

18.Re:Socket connection有必要用connection pool吗? [Re: felexs] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-08-07 19:45

felexs wrote:
是否需要连接池主要看需求。
如果你提及的营帐系统和应用是一个厂商开发的,那么这种方式显然是地效、自找麻烦的。此时client与server只需一个长连接,保持连接的心跳侦测,在连接上发送消息包即可。(可能大家都知道,废话了)。

在与一个已有系统对接时,该系统只能接收断连接(比如该系统是通过SERVLET接受请求的),此时client端要提高性能,连接池当然需要,这个连接池在系统总开销上并没有节省,是典型的以空间换时间。

去年(当时我还在国内一家电信设备制造商)开发一套数据业务平台时,就碰到过上述问题。

实现方法关键在于如何换开销。


我认为你说的不对。
一个长连接的处理能力是局限的,尤其是前端大量并发请求时,因为一个连接处理请求是串行的。
连接池建立了多个长连接,前端并发时多个连接可以并行处理。
这两种方式有明显的对比。

如果是短连接,情况也是不同的。短连接处理完一次请求后即断开,没有必要也不容易实现连接池。

19.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: felexs
Posted on: 2003-08-14 13:52

这不是揣测,而是根据实际的使用经验!
你知道吗?一般的电信级应用一个连接已经够了,呼叫指标可以达到1000CAPS.

正是因为短连接,不停的建立、拆除才需要从连接策略上考虑,引入开销换取的解决方案,所谓的连接池技术也是在不同的场合有不同的思路及应用。

20.Re:Socket connection有必要用connection pool吗? [Re: felexs] Copy to clipboard
Posted by: speeddemon
Posted on: 2003-08-18 10:16

felexs wrote:
这不是揣测,而是根据实际的使用经验!
你知道吗?一般的电信级应用一个连接已经够了,呼叫指标可以达到1000CAPS.

正是因为短连接,不停的建立、拆除才需要从连接策略上考虑,引入开销换取的解决方案,所谓的连接池技术也是在不同的场合有不同的思路及应用。


要解决短连接生命周期短带来的开销问题,可以采用hold住连接的方式,此时短连接已经变成了长连接;为了hold这个长连接,必须发送keepAlive报文、检查连接可用性,在连接broken后还要重建,这已经是一个连接池了!

兄台说话不要那么绝对好不好?你是根据实际使用经验说话,焉知我就不是呢?你说一般的电信级应用可以达到1000CAPS,怎么知道这个性能指标能满足我们的要求呢?你又怎么断定局方提供给我们使用的接口一定能达到1000CAPS的指标呢?

21.Re:Socket connection有必要用connection pool吗? [Re: speeddemon] Copy to clipboard
Posted by: felexs
Posted on: 2003-08-18 12:46

sorry,我目光短浅了。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923