pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

基于Tomcat運(yùn)行HTML5 WebSocket echo實(shí)例詳解

作為HTML5新特性之一的WebSocket組件,對(duì)實(shí)時(shí)性有一定要求的WEB應(yīng)用開發(fā)中還是有一定用武之地,基于Websocket可以很方便的開發(fā)基于web聊天程序,各種網(wǎng)頁(yè)消息通知與推送通知。 ...,HTML

 

  一、概述

 

  作為HTML5新特性之一的WebSocket組件,在實(shí)時(shí)性有一定要求的WEB應(yīng)用開發(fā)中還是有一定用武之地,高版本的IE、Chrome、FF瀏覽器都支持Websocket,標(biāo)準(zhǔn)的Websocket通信是基于RFC6455實(shí)現(xiàn)服務(wù)器端與客戶端握手與消息接發(fā)的。如果對(duì)Websocket通信不是太理解,可以查看RFC文檔即可,簡(jiǎn)單說(shuō)就是通過(guò)發(fā)送HTTP請(qǐng)求,實(shí)現(xiàn)雙方握手,將無(wú)狀態(tài)的HTTP通信協(xié)議進(jìn)一步升級(jí)成有狀態(tài)的通信協(xié)議,同時(shí)Websocket還支持子協(xié)議選項(xiàng)與安全傳輸。標(biāo)準(zhǔn)的websocket連接URL以ws開頭,如果是基于TLS的則以wss開頭。基于Websocket可以很方便的開發(fā)基于web聊天程序,各種網(wǎng)頁(yè)消息通知與推送通知。

 

  如果非要扒一扒Websocket的今生前世的話,還記得最早的基于HTTP輪詢實(shí)現(xiàn)網(wǎng)頁(yè)即時(shí)通信的方式,那種做法比較消耗資源、于是有人改進(jìn)了編程CometD長(zhǎng)連接方式,可是本質(zhì)上還是換湯不換藥,而websocket的出現(xiàn)正好解決了這些問(wèn)題,但是很多瀏覽器的低版本還是不支持websocket,于是還催生了一些基于websocket理念實(shí)現(xiàn)的JS通信框架,其中學(xué)得比較像的有SockJS與socket.io,他們都號(hào)稱支持websocket,然后如果瀏覽器端不支持原生的websocket,它們會(huì)自動(dòng)啟用fallback選項(xiàng)使用其它諸如ajax、Http輪詢、長(zhǎng)輪詢/連接、甚至是flash的socket等機(jī)制實(shí)現(xiàn)模擬websocket的工作方式,但是他們最大的弊端是如果客戶端使用了這些框架,服務(wù)器必須用它們,否則等待開發(fā)者就是一大堆無(wú)法回避的問(wèn)題,同時(shí)很多都是無(wú)解的。主要原因在于它們實(shí)現(xiàn)自己的協(xié)議集,不照它們的格式處理數(shù)據(jù)沒法玩。閑話說(shuō)的有點(diǎn)多。

 

  二、實(shí)現(xiàn)步驟

 

  Tomcat7的高版本中實(shí)現(xiàn)了Websocket服務(wù)器端RFC6455標(biāo)準(zhǔn)協(xié)議,可以跟瀏覽器端websocket進(jìn)行通信,首先要做好如下幾步:

 

  1.安裝高版本JDK – JDK8

  2.安裝Tomcat 7.0.64

  3.在eclipse中建立一個(gè)動(dòng)態(tài)的web項(xiàng)目

 

  根據(jù)JSR標(biāo)準(zhǔn),Java中實(shí)現(xiàn)websocket的標(biāo)準(zhǔn)接口可以基于注解方式,tomcat也搞好了,只有我們實(shí)現(xiàn)如下代碼,即可創(chuàng)建一個(gè)websocket回聲服務(wù)器:

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中啟動(dòng)websocket服務(wù)器,首先需要在web.xml添加如下配置:

[listener]  
    [listener-class]org.apache.tomcat.websocket.server.WsContextListener[/listener-class]  
[/listener]


  然后實(shí)現(xiàn)ServerApplicationConfig接口,實(shí)現(xiàn)如下:

  創(chuàng)建網(wǎng)頁(yè)echo.html,內(nèi)容如下:

[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);

   來(lái)源:gloomyfish的博客

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

由于實(shí)際運(yùn)行環(huán)境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會(huì)達(dá)到,所以這部分不是開發(fā)者能夠決定的,開發(fā)者能作的是盡可能通
本文將使用HTML5提供的VideoAPI做一個(gè)自定義的視頻播放器,需要用到HTML5提供的video標(biāo)簽、以及HTML5提供的對(duì)JavascriptAPI的擴(kuò)展。,HTML5中國(guó),中國(guó)最大的HTML5中文門戶。
隨著 Hybrid 應(yīng)用的豐富,HTML5 工程師們已經(jīng)不滿足于把桌面端體驗(yàn)簡(jiǎn)單移植到移動(dòng)端,他們覬覦移動(dòng)原生應(yīng)用人性化的操作體驗(yàn),特別是原生應(yīng)用與生俱來(lái)的豐富的手勢(shì)系統(tǒng)。HTML5 沒有提
你想要在自己網(wǎng)站上分享一個(gè)產(chǎn)品,或者是一個(gè)作品集,又或者僅僅只是一個(gè)靈感。在你發(fā)布到網(wǎng)上之前,你想讓它看起來(lái)有吸引力,專業(yè),或者至少得看起來(lái)像那么回事。那么你接下
H5廣告,包括H5廣告的設(shè)計(jì)流程,究竟有什么講究,和階段。為了能幫助更多的人了解H5廣告,我專門做了一個(gè)講義。同時(shí),也讓我意外的收到了非常好反饋和認(rèn)!這是對(duì)我的極大鼓勵(lì)!我的
本文主要內(nèi)容有:框架與組件、構(gòu)建生態(tài)、開發(fā)技巧與調(diào)試、html、css與重構(gòu)、native/hybrid/桌面開發(fā)、前端/H5優(yōu)化、全棧/全端開發(fā)、研究實(shí)驗(yàn)、數(shù)據(jù)分析與監(jiān)控、其它軟技能、前端技術(shù)網(wǎng)
主站蜘蛛池模板: 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 工业制氮机_psa制氮机厂家-宏骁智能装备科技江苏有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 模切之家-专注服务模切行业的B2B平台! | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 |