在网页中使用Socket编程

来源:互联网 发布:淘宝全屏图片轮播制作 编辑:程序博客网 时间:2024/06/05 09:11

背景:要完成的任务是这样的,要通过网页对一个服务器进行操作,服务器接受Socket TCP连接。

一开始,在网页里创建Socket,然后连接服务器,没有做其它特殊的处理,结果数据只能发送一次,Socket便断开。

原来,HTTP协议是无连接、无状态的,网页的生命周期仅是从页面的请求到页面装载完成,一量装载完毕,网页中的所有对像便被销毁。状态的只在需要门的技术,在ASP.NET中可以用Cookie、Application、Session、ViewState等方法,因为Socket连接是WEB服务器与另外一台服务器连接,状态保存到服务器比较好,如果保存在客户端则在每次请求时还需要把状态返回到服务器;从生存周期上考虑,状态只需要保存到用户关闭浏览器,而无而长期保存。鉴于以上考虑,采用Session非常合适。

程序流程如下:客户请求网页,创建两个线程分别用于Socket发送和接收,然后将线程的引用存入Session,这样线程的引用便被保存下来,下次再请求页面时便不用再重新连接,可以直接发送或接收数据。当用户退出时,要求用户点击退出按钮,服务器响应该事件,断开Socket连接并销毁线程即可,而Session会在用户关闭浏览器后20分钟内自动失效销毁。

(2007-01-29)
但这样有一个问题,这样多个客户都可以通过浏览器打开该页面,但是各个页面使用的Session是一个,所以使用的线程也是一个,这样就导致多个用户之间发送的指令相混。

想到一种方法,还没有实现,就是每个线程使用一个随机生成的数字作为Session的ID,这样基本上可以保证多个用户不使用同一个线程,而这个ID保存在客户端,每次发送数据时Request就保存了其Cookie信息,这样便避免了所有客户端使用同一Session的问题。