BBS水木清华站∶精华区

发信人: kasper (回来了), 信区: Java        
标  题: Re: java.lang.OutOfMemoryError? 
发信站: BBS 水木清华站 (Wed Jan 17 17:06:56 2001) 
 
 
【 在 vago (无中生有) 的大作中提到: 】 
 面向持久连接的client/server程序并不意味着一定要使用持久的socket连接,这是 
 两个层面的东西,事实上,设计良好的c/s程序一开始就要定义自己的通讯协议,同样 
 也要决定是否连接是否有状态,只要可以追踪client的状态历史就可以被认为是面向 
 连接的。 
 应用程序的通讯协议完全取决于程序自身的需要和设计,其可以在任何一种底层通讯 
 协议上进行封装,无论是tcp还是http(事实上http也是在tcp之上的协议)。 
 
hehe, 你说的没错,逻辑上连接(也就是session)和TCP连接不是不个东西,否则OSI也 
 
在传输层上面再有一个会话层(session layer),就因为session是更高一层的东西。 
 
但一般来说,对基于TCP/IP的应用来说,因为TCP/IP没有Session控制支持,一个逻辑 
 
session对应一个tcp connection是最直观最有效的做法,所以大部分一般要求的应用 
 
层协议都是这样的(比如telnet, ftp(有点不一样),POP3,IMAP...)。 
 
这可以说是个设计思想的问题,TCP/IP这种相对简单化的approach也是其战胜OSI/ISO 
 
的一个原因。 
 
当然你是可以有别的方案,比如直接用Servlet支持的HTTP Session支持,或者自己设 
 
计一套类似的协议,或者用udp,但都有一些问题。比如HTTP的主要问题是overhead比 
 
较大,每次操作建立新的连接,Server的TCP层负载大,同时响应速度慢(TCP的三次握 
 
手)。而且HTTP的Session控制是非标准的,Cookie based,URL-rewriting based等各种 
 
方法,互不兼容。udp的问题在于这个协议太初级了,丢包、乱序都得自己处理,适合 
 
游戏、icq这样的对这些要求不高的应用。 
 
 
 提问题的兄弟的程序无疑是有状态的,他要的用户连接无疑是终端用户登录建立的连接 
 和tcp的socket的连接没有多大的逻辑关系,通过一对一的socket的持久连接的确可以 
 满足应用程序的功能要求(很直观嘛),但另外我们另外还有n种方案满足他的要求, 
 ................... 
 
-- 
                              
      你我,不过是尘埃。      
[25C                              
 
 
※ 修改:·kasper 於 Jan 17 17:07:39 修改本文·[FROM: 166.111.136.252] 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.136.252] 

BBS水木清华站∶精华区