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)
主站蜘蛛池模板: 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 猎头招聘_深圳猎头公司_知名猎头公司| 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 哈尔滨发电机,黑龙江柴油发电机组-北方星光 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 烽火安全网_加密软件、神盾软件官网 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 |