Java Web在线聊天系统雏形的研究.docVIP

  • 4
  • 0
  • 约3.44千字
  • 约 7页
  • 2018-10-11 发布于福建
  • 举报
Java Web在线聊天系统雏形的研究

Java Web在线聊天系统雏形的研究   摘要:随着网络的普及,在线技术支持、在线交流和在线服务等逐渐在各网站上流行。如何克服http协议的无状态性,模拟C/S结构中客户端与服务器端有状态连接的通信机制,如何解决使用传统AJAX无法达到真正实时的缺陷,如何尽可能的降低服务器的负载来实现B/S结构的实时通讯系统,已成为近几年的技术研究热点。本文以C/S结构客户端间通信机制为基础,通过对当前主流的AJAX框架的研究,结合servlet技术及GoF设计模式的运用,设计了B/S结构的在线聊天系统雏形,为web实时聊天系统的开发提供了设计思路。   关键词:Java web在线聊天;B/S在线聊天系统;反向AJAX;浏览器间通讯      1.引言   随着网络的普及,在线技术支持、在线交流和在线服务等逐渐在各网站上流行。其中,在线交流提供了客服与用户及用户间直接对话的平台。如今,像QQ、雅虎通这些传统的C/S结构的实时通讯软件已经非常成熟,像web QQ这样B/S结构的在线聊天平台正以其轻盈、便捷的优势成为近几年实时通讯系统发展的一种趋势。   对于传统C/S结构的在线聊天系统,需要用户安装客户端软件,对于一次性访问或者需要在短时间内获取信息的用户来说,这种等待是无法忍耐的。此外,客户端软件存在升级维护等问题是用户所不愿意等待的。B/S结构与其不同,它不需要安装任何软件,直接使用浏览器即可,因为它轻盈、便捷的优势,得到了更多用户的偏好。那么,如何借鉴C/S结构的通讯机制、克服B/S结构的限制,实现B/S结构的在线聊天系统,是本文研究的重点。   2.设计方案   2.1 从C/S到B/S   对于C/S结构的实时通讯软件,它充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端,降低了系统的通讯开销。通过socket编程、多线程监听等技术,客户端间通过服务器转发的形式进行通信。   客户端通过IP号与PORT号建立与服务器的连接,建立数据流管道,向管道中写入信息给服务器端接收。同时客户端创建一个接收服务器端转发信息的线程,反复的读取管道,从管道中得到服务器端转发来的信息。在服务器端,开启对指定端口号的监听,检查是否有客户端来连接,若有,则保存连接上的客户端信息到客户端列表中,并开启线程监听此客户端。若客户端退出或者掉线,则从客户端列表中删除该对象,并结束此监听线程。服务器端通过与客户端之间的管道,得到客户端发送的信息,通过解析,在客户端列表中找到信息的接收者,向其管道中写入信息,即完成转发过程。   对于B/S结构,由于http协议的无状态性,要像C/S结构那样保持连接的状态需要很大的服务器开销。其次,作为“伪客户端”的浏览器很难拥有像客户端程序那样监听和处理数据的能力。这两点限制了C/S结构的在线聊天系统向B/S结构移植的潜力,但它的思想是可以“移植”的。   2.2 设计方案一   首先,Session作为使http协议能够保存自身状态的解决方案之一,在每个用户登录时,服务器端先将该用户的相关信息存入Session及在线用户列表中,并初始化一个容器用于存放该用户在线聊天的内容。随后服务器端开启Session的监听器来监听此Session。若用户长时间没有向服务器发出请求,或者用户退出、掉线等,Session将自动被移除,并视为该用户已下线,同时触发Session监听器,从在线用户列表中移除该用户信息。   第二,登录的用户可以通过在线用户列表选择接收消息的用户,填写好发送内容后点击发送。客户端脚本程序收集页面的信息,得到该信息的发送者、接收者和发送内容,转化为统一格式的字符串即”sender:receiver:message”发送给服务器端。   第三,服务器端解析接收到的字符串,得到发送者、接收者及发送内容,将其字符串保存到发送者和接收者的容器中各一份。然后,服务器端将向所有浏览器以广播的方式发送此容器。客户端脚本程序从容器的标识上判断是否要为自己的容器,若是则接收,并运行脚本程序解析出消息内容并显示在页面上。   2.3 设计方案二   在上述方案中采用了DWR框架中广播的方式,当然也可以将容器发送给指定的浏览器。在DWR框架中,每个页面每次生成时都会产生一个ScriptSession,它的ID号唯一。当用户进入在线聊天页面的时候,客户端脚本需要请求服务器端记录该用户页面ScriptSession的ID号,用于服务器端通过此ID号找到接收者的页面/会话脚本,将消息内容直接发送给指定的客户端。此时,客户端就不需要判断,直接解析出消息内容并显示即可。   3.关键点解析   3.1 反向AJAX与“推”技术   传统的AJAX是由客户端的JavaScript调用服务器

文档评论(0)

1亿VIP精品文档

相关文档