您好,欢迎访问一九零五行业门户网

基于Tomcat运行HTML5 WebSocket echo实例详解

一、概述
作为html5新特性之一的websocket组件,在实时性有一定要求的web应用开发中还是有一定用武之地,高版本的ie、chrome、ff浏览器都支持websocket,标准的websocket通信是基于rfc6455实现服务器端与客户端握手与消息接发的。如果对websocket通信不是太理解,可以查看rfc文档即可,简单说就是通过发送http请求,实现双方握手,将无状态的http通信协议进一步升级成有状态的通信协议,同时websocket还支持子协议选项与安全传输。标准的websocket连接url以ws开头,如果是基于tls的则以wss开头。基于websocket可以很方便的开发基于web聊天程序,各种网页消息通知与推送通知。
如果非要扒一扒websocket的今生前世的话,还记得最早的基于http轮询实现网页即时通信的方式,那种做法比较消耗资源、于是有人改进了编程cometd长连接方式,可是本质上还是换汤不换药,而websocket的出现正好解决了这些问题,但是很多浏览器的低版本还是不支持websocket,于是还催生了一些基于websocket理念实现的js通信框架,其中学得比较像的有sockjs与socket.io,他们都号称支持websocket,然后如果浏览器端不支持原生的websocket,它们会自动启用fallback选项使用其它诸如ajax、http轮询、长轮询/连接、甚至是flash的socket等机制实现模拟websocket的工作方式,但是他们最大的弊端是如果客户端使用了这些框架,服务器必须用它们,否则等待开发者就是一大堆无法回避的问题,同时很多都是无解的。主要原因在于它们实现自己的协议集,不照它们的格式处理数据没法玩。闲话说的有点多。
二、实现步骤
tomcat7的高版本中实现了websocket服务器端rfc6455标准协议,可以跟浏览器端websocket进行通信,首先要做好如下几步:
1.安装高版本jdk – jdk8
2.安装tomcat 7.0.64
3.在eclipse中建立一个动态的web项目
根据jsr标准,java中实现websocket的标准接口可以基于注解方式,tomcat也搞好了,只有我们实现如下代码,即可创建一个websocket回声服务器:
package com.websocket.demo; import java.io.ioexception; import java.nio.bytebuffer; import javax.websocket.onmessage; import javax.websocket.onopen; import javax.websocket.session; import javax.websocket.server.serverendpoint; @serverendpoint(value = "/echo") public class echoexample { @onmessage public void echotextmessage(session session, string msg, boolean last) { try { if (session.isopen()) { system.out.println("received from client message = " + msg); session.getbasicremote().sendtext(msg, last); } } catch (ioexception e) { try { session.close(); } catch (ioexception e1) { } } } @onopen public void openconn(session session) throws ioexception { session.getbasicremote().sendtext("hello web socket"); // means open it } @onmessage public void echobinarymessage(session session, bytebuffer bb, boolean last) { system.out.println("send binary message..."); try { if (session.isopen()) { system.out.println("byte buffer lenghth : " + bb.array().length); system.out.println("byte buffer content: " + ((bb.array()[0]) & 0xff)); system.out.println("byte buffer content: " + ((bb.array()[1]) & 0xff)); system.out.println("byte buffer content: " + ((bb.array()[2]) & 0xff)); session.getbasicremote().sendbinary(bb, last); } } catch (ioexception e) { try { session.close(); } catch (ioexception e1) { // ignore } } } }
如何在tomcat中启动websocket服务器,首先需要在web.xml添加如下配置:
[listener] [listener-class]org.apache.tomcat.websocket.server.wscontextlistener[/listener-class] [/listener]
然后实现serverapplicationconfig接口,实现如下:
创建网页echo.html,内容如下:
[html] [head] [title>web socket echo test[/title] [script] var ws = null; var count = 0; function setconnected(connected) { document.getelementbyid('connect').disabled = connected; document.getelementbyid('disconnect').disabled = !connected; document.getelementbyid('echo').disabled = !connected; } function connect() { var target = document.getelementbyid('target').value; if (target == '') { alert('please select server side connection implementation.'); return; } if ('websocket' in window) { ws = new websocket(target); } else if ('mozwebsocket' in window) { ws = new mozwebsocket(target); } else { alert('websocket is not supported by this browser.'); return; } ws.onopen = function () { setconnected(true); log('info: websocket connection opened.'); }; ws.onmessage = function (event) { log('received: ' + event.data);
以上就是基于tomcat运行html5 websocket echo实例详解的内容。
其它类似信息

推荐信息