2009年2月25日星期三

网络中的Connection和业务中的Session

网络编程中总会建立Connection对象代表到某个endpoint的连接,或长或短,代表了一个逻辑上的并且真实的数据传输通道。
Session并不像connnection那样对应某个真实网络元素。它是应用程序中的一个逻辑单元,是某种业务(需求)的抽象。

举例说明(借机总结一下以前项目中的设计):
1)Neustar IM项目中,Connection类就是代表了一个网络连接。在客户端应用程序中有一个连接是到服务器的长连接,用于侦听服务器发送来的命令、通知。客户端还有一个连接是短的,用户每次发送消息时使用。而session,在这个应用中代表了用户与其它用户的一个(相对某段时间内连续的)会话。这个会话保存了聊天记录。这个会话可能是某种特别的session,比如群组聊天。(当时的项目没有把群聊的功能利用session作为接口。现在再说是马后炮了。)总之,session是你业务逻辑方面的概念。
2)现在的项目又遇到了类似的问题。到dslam设备需要真正的telnel连接。每套测试用例都要通过connection被发送到设备执行。如果需要并行执行一些测试,就需要同时存在若干到设备的连接。这里,我们就可以把执行一次测试,这样逻辑上的概念,当作一个session。

connection和session的区别应该是这样的了。它们之间的联系呢?
应该是session必然对应一个connection吧,并且至少一个吧,多数情况下恐怕也是一个。