socket连接池的实现探索

点评长连接的是建立一个TCP连接,然后发送一定策略的心跳检测,保持套接字(TCP+port)socket的连接不断开。

然后看到携程关于网络优化的[文章]

Native模块是携程的核心业务模块(酒店、机票、火车票、攻略等),Native模块的网络服务主要通过TCP连接实现,而非常见的Restful HTTP API那种HTTP连接,只有少数轻量级服务使用HTTP接口作为补充。

TCP连接网络服务模块使用了长连接+短连接机制,即有一个长连接池保持一定数目长连接,用于减少每次服务额外的连接,服务完成后会将该连接Socket放回长连接池,继续保持连接状态(一段时间空闲后会被回收);短连接作为补充,每次服务完成后便会主动关闭连接。

点评默认的是一个Socket连接,所有还比较简单,但是如果让实现一个连接池的话,应该怎么做到呢,这个池是如何表示的?

之前考虑过线程池,只知道有一个线程管理器。其实自己刚开始对这个池的概念有点畏惧,感觉是一个很高大上的内容,但是其实想通了以后,一般来说一个池,就是一个队列吧,可以用vector实现,也可以用array实现,就是把很多线程或者socket都放到一个队列里面,如果队列有回收,销毁,创建等功能。

简单来说,池的定义,可以通过两个方式来实现,一个是定义两个队列:

比如TCP连接池的实现,可以定义两个队列,一个是使用中的队列,一个是未使用的队列,每次建立新的连接时,就把这个连接放到使用中去,完成后,就放到未使用中。

另一个是,一般也是通用的,实现一个manager,负责管理所有的连接,常用的线程池就基本采用这种方式。

简单的双队列SOCKET连接池,参考http://www.cnblogs.com/HopeGi/archive/2013/04/25/3042238.html