论坛首页 Java企业应用论坛

读HSQLDB的源码想到的

浏览 17206 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-02  
icefire 写道
有时候觉得,迷惑的时候,读源码比看API来得快!
hand!
0 请登录后投票
   发表时间:2007-07-02  
leebai 写道
楼主揭示出了学习编程的正正之道!

往上看,多是浮躁的、流行一时的东西;往下看,基本上都是沉淀的精华。

作为真正的开发者,研究和学习各种服务器和JDK的原代码,比学习各种框架、ORMaping、J2EE乱七八糟的API要有意义得多。


icefire 写道
有时候觉得,迷惑的时候,读源码比看API来得快!

写源代码比看源代码容易,有时候

     --接上一句,典型的程序员。

读一辈子代码也不一定能看出个微积分,还是看高数吧

不知道那位虾客能抽出一段代码来摆个擂台?
0 请登录后投票
   发表时间:2007-11-02  
javachs 写道
我看了你关于hsqldb的帖子,讲到hsqldb源码里有关于数据库long connection和short connection的实现,我看了下不太明白,数据库的long connection如何保持连接一直不太明白,能讲一下关于数据库长连接吗?


1、数据库的connection保持也就是TCP的连接保持,也就是TCP里面的Keepalive选项:在Socket编程里面的Keepalive。在Java的Socket类中就专门说到SO_KEEPALIVE:http://download.java.net/jdk7/docs/api/java/net/SocketOptions.html
顺便说一下,在TCP通信期间,是靠sequence number来维持的,它们由initial sequence number (ISN)递增,它是keepAlive的前提。

2、在hsqldb里面,是默认用Java socket的,自己本身并没有去实现long connection,也就是说这个连接默认是2小时,反正我也没有找到这个选项设置的地方。在其HTTPClientConnection里面,倒是每次execute sql后就close了,遵从http协议的short connection实现。附带说一下,在hsqldb里面,是通过sessionID来标识客户端的((这个sessionID可以保证认证后的安全sql),就如同http里面的cookie中的JSESSIONID。

3、我以前做过即时通讯的开发,在OpenFire里面,keepAlive是自己实现的,也就是server端有个demo线程,默认每60s给所有客户端发送一个检测包,如org.jivesoftware.openfire.net包下的SocketConnection的checkHealth() 注释:
    /**
     * Returns true if the socket was closed due to a bad health. The socket is considered to
     * be in a bad state if a thread has been writing for a while and the write operation has
     * not finished in a long time or when the client has not sent a heartbeat for a long time.
     * In any of both cases the socket will be closed.
     *
     * @return true if the socket was closed due to a bad health.s
     */

顺便说一下,现在的ajax的push技术(comet)(譬如web版的gtalk、msn),也主要利用http的keepalive选项,还有个专门的协议扩展:http://www.xmpp.org/extensions/xep-0124.html

如果你有兴趣,可以看看《TCP/IP Illustrated, Volume 1: The Protocols》的Chapter 23. TCP Keepalive Timer,文中说到Keepalive是TCP里面的一个可选项,一般由application层实现,并且给出了理由。


0 请登录后投票
   发表时间:2007-11-02  
楼主除了java用过别的编程语言吗?是否熟悉TCP/IP等协议?

挺奇怪为啥有如此大的感想..
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics