基于websocket的信息推送技术在网站系统中的设计与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zcv_2323
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文论述websocket信息推送技术的概念,以及如何在高校教学网络系统中设计实现websocket信息推送。
  关键词:推送技术;高校教学网络系统;实时通信
  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)27-0064-02
  1 背景
  传统的HTTP request模式存在明显的缺点,浏览器通过不断向服务器“轮询”获取最新信息,从而占用大量带宽资源。WebSocket协议作为HTML5的一种新协议,很好地解决了这个问题:浏览器发出websocket连接请求,服务器发生回应,产生“握手”,从而使浏览器与服务器之间产生长连接。这个长连接的生命周期是从建立握手到浏览器或者服务器一方主动断开连接为止,相对于以往的http连接,生命周期长。
  2 服务器信息推送
  首先,用户页面的布局用的是html的iframe子框架组合,头部子框架留出一块位置用户显示系统推送消息,同时负责与Server端进行websocket连接。然后管理员账号有系统消息选项,进入消息面板进行消息推送。
  关键功能代码介绍如下。
  子frame触发同源兄弟frame发送函数:
  function postToServer(){
  parent.frames["topFrame"].postToServer();
  }
  兄弟frame将消息发送给服务器:
  function postToServer(){
  var msg = parent.frames["main"].document.getElementById("pushtext").value;
  we.send(msg);
  }
  Server端存储在线用户session的数据结构为动态数组:
  private static ArrayList mmiList = new ArrayList();
  若用戶成功用websocket与Server握手时,将该用户节点加入数组:
  public void onOpen(WsOutbound outbound){
  System.out.println("Open Client");
  this.myoutbound = outbound;
  mmiList.add(this);}
  用户关闭网站,与服务器断开握手时,删除该用户节点:
  public void onClose(int status){
  System.out.println("Close Client.");
  mmiList.remove(this);
  }
  系统消息推送时,Server端将从管理员用户接收来的消息发送给所有在线用户;发送时通过遍历在线用户session数组进行发送:
  public void onTextMessage(CharBuffer cb) throws IOException{
  System.out.println("Accept Message:" cb);
  for(MyMessageInbound mmib : mmiList){
  CharBuffer buffer = CharBuffer.wrap(cb);
  mmib.myoutbound.writeTextMessage(buffer);
  mmib.myoutbound.flush();
  }
  }
  3 客户端信息推送
  websocket技术如果是管理员面向全体在线用户就是系统推送,而如果是用户与用户间互相进行推送就升级为了在线聊天。
  关键功能代码介绍如下。
  //发送消息给Server
  function sendMsg() {
  var fromName = parent.frames["main"].document.getElementById("userName").innerHTML;
  var toName = parent.frames["main"].document.getElementById(’name’).value; //发给谁
  var content = parent.frames["main"].document.getElementById(’writeMsg’).value; //发送内容
  ws.send(fromName "," toName "," content);
  }
  //从Server接收消息
  ws.onmessage = function(e){
  if(flage == 0){ parent.frames["BoardMenu"].document.getElementById("message").inn erHTML = e.data "
";
  }else{ parent.frames["main"].document.getElementById("xiaoxi").textContent = e.data "\n";
  } }
  //Server端存储用户数据的数据结构是哈希表   public static HashMap getMessage(CharBuffer msg) {
  HashMap map = new HashMap();
  String msgString = msg.toString();
  String m[] = msgString.split(",");
  map.put("fromName", m[0]);
  map.put("toName", m[1]);
  map.put("content", m[2]);
  return map;
  }
  //服务器发送给消息接收者
  protected void onTextMessage(CharBuffer msg) throws IOException {
  //用户所发消息处理后的map
  HashMap messageMap = MessageUtil.getMessage(msg); //处理消息类
  //上线用户集合类map
  HashMap userMsgMap = socketList; //InitServlet.getSocketList();
  String fromName = messageMap.get("fromName"); //消息来自人 的userId
  String toName = messageMap.get("toName"); //消息发往人的 userId
  //获取该用户
  MessageInbound messageInbound = userMsgMap.get(toName);
  MessageInbound messageInbound2 = userMsgMap.get(fromName); //在倉库中取出发往人的MessageInbound
  if(messageInbound!=null){ //如果发往人 存在进行操作
  WsOutbound outbound = messageInbound.getWsOutbound();
  String content = messageMap.get("content"); //获取消息内容
  String msgContentString = fromName " " content; //构造发送的消息
  //发出去内容
  CharBuffer toMsg = CharBuffer.wrap(msgContentString.toCharArray());
  outbound.writeTextMessage(toMsg); //
  outbound.flush();
  if(messageInbound2!=null){ //如果发往人 存在进行操作
  WsOutbound outbound2 = messageInbound2.getWsOutbound();
  String content2 = messageMap.get("content"); //获取消息内容
  String msgContentString2 = fromName " " content2; //构造发送的消息
  //发出去内容
  CharBuffer toMsg2 = CharBuffer.wrap(msgContentString2.toCharArray());
  outbound2.writeTextMessage(toMsg2);
  outbound2.flush();
  }
  }else{
  WsOutbound outbound3 = messageInbound2.getWsOutbound();
  String error = "系统消息:对不起,对方不在线!";
  CharBuffer toMsg3 = CharBuffer.wrap(error.toCharArray());
  outbound3.writeTextMessage(toMsg3);
  outbound3.flush();
  }
  4 结束语
  本文基于websocket技术实现了网络教学系统的信息推送服务,实现了管理员面向全体在线用户就是系统推送,用户与用户间的在线聊天等功能。
  参考文献:
  [1] Williams N S. Java Web高级编程[M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.
  [2] Ja Lengstorf, Leggetter P.构建实时Web应用[M]. 肖志清, 译.北京: 机械工业出版社, 2013.
  [3] 赵振,王顺. Web异步与实时交互iframe Ajax WebSocket开发实战[M]. 北京: 人民邮电出版社, 2016.
其他文献
古筝是我国的一种传统乐器,在当代的音乐体系中仍然发挥重要的艺术价值,也深受人们的喜爱,越来越多人认识到古筝所蕴含的艺术价值,并参与到古筝教学活动当中。有效的古筝教学
摘要:随着科学技术的发展,互联网开始走进我们的视线。网络时代的到来,为我们生活带去便利的同时也加快了多媒体的教学模式。新型的教学模式,从教学形式上打破常规,采用多媒体作为媒介,进行课上课下的教学。基于Web的数据库计算机教学系统也发生了本质性的改变。该文先从几个基本概念说起,将分析系统设计的关键技术,阐述在教学系统开发时要注意的问题,并就课程系统的结构以及设计理念做简要的分析。  关键词:计算机教
校园网作为现代职业教育的技术支持,它的运行状态好坏,直接关系到能否顺利完成各项教学任务,达到技能人才培养的目标。因此,如何配置、调试及管理好校园网的运行状态,是摆在我们面前必须解决的实际问题。该文推介一套基于校园网运行职能的调试和管理方法以供业界参考,探讨如何保障校园网拥有最佳的运行状态。
摘要:现有MIS报表输出存在不能输出复杂报表和用户自定义报表的问题,而Excel在數据运算与报表的制作上具有很大的灵活性,该文探讨了通过运用OLEAutomation技术使用户可以在一个MIS中控制Excel对象,达到可以由用户自由对所生成的报表按照自己的需求进行编辑和打印的目的,给出了用Defphi利用其自身对OLE的支持特性和Excel有机结合起来实现一种面向用户的、所见即所得的动态报表的方法
随着新课标的改革,中学地理的教学要求和目标都发生了变化.为了更加适应新时代的发展潮流,越来越多的教师已经不再拘泥于传统教学模式,而是开始探索更加适合当代地理教学的新
本文从生成句法角度探讨量词结构的内部结构及其句法推导。笔者认为,量词结构的两种基本形式为[DP Spec[D`D[NumP Num Cl[NP N]]]]和[DP Ni[D`D[NumP Num Cl[NP ti]]]],无论