锁定老帖子 主题:读HSQLDB的源码想到的
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-02
icefire 写道 有时候觉得,迷惑的时候,读源码比看API来得快! hand!
|
|
返回顶楼 | |
发表时间:2007-07-02
leebai 写道 楼主揭示出了学习编程的正正之道!
往上看,多是浮躁的、流行一时的东西;往下看,基本上都是沉淀的精华。 作为真正的开发者,研究和学习各种服务器和JDK的原代码,比学习各种框架、ORMaping、J2EE乱七八糟的API要有意义得多。 icefire 写道 有时候觉得,迷惑的时候,读源码比看API来得快!
写源代码比看源代码容易,有时候 --接上一句,典型的程序员。 读一辈子代码也不一定能看出个微积分,还是看高数吧 不知道那位虾客能抽出一段代码来摆个擂台? |
|
返回顶楼 | |
发表时间: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层实现,并且给出了理由。 |
|
返回顶楼 | |
发表时间:2007-11-02
楼主除了java用过别的编程语言吗?是否熟悉TCP/IP等协议?
挺奇怪为啥有如此大的感想.. |
|
返回顶楼 | |