<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點點滴滴。

    構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server

    前言

    現(xiàn)在一說到實時web,可能大家不由自主的就想到了node.js,確實,在語言級別node.js實現(xiàn)了異步的、基于事件機(jī)制的IO特性,使用簡單。在JAVA語言層面,提供了NIO作為非阻塞IO的替代品。無論node.js還是JAVA,都沒有從真正意義上實現(xiàn)AIO(這個需要操作系統(tǒng)支持,依賴內(nèi)置庫/運(yùn)行時模擬支持)。

     

    Websocket/Flashsocket

    要說到實時Web,就不能不說到Websocket,目前存在的幾個草稿協(xié)議,若是要自己實現(xiàn)websocket協(xié)議支持,需要注意其握手協(xié)議等。

    目前對Websocket的支持,caniuse.com 給出了一張圖表,詳細(xì)說明了各個瀏覽器的支持情況:

    image

    粉紅色區(qū)域表示不支持Websocket。

    至于IE瀏覽器,以及部分陳舊的桌面瀏覽器,可以選擇Flashsocket作為替代品。

    客戶端如何把Websocket和Flashsocket結(jié)合在一起使用,可借鑒開源項目:web-socket-js (客戶端的Websocket實現(xiàn)方案)

     

    其思路和socket.io大致一致,僅僅提供對websocket的客戶端的簡單包裝,若是Android 上原生瀏覽器,沒有安裝Flash Lite情況下,就無能為力了。

    因此,僅僅憑借Websocket + Flashsocket,是不能夠完成跨瀏覽器、統(tǒng)一客戶端API的重任。

     

    socket.io通信傳輸協(xié)議

    socket.io 支持以下通信信道傳輸協(xié)議:

    • WebSocket
    • Adobe® Flash® Socket
    • AJAX long polling
    • AJAX multipart streaming
    • Forever Iframe
    • JSONP Polling

    socket.io客戶端和服務(wù)器端雙方約定適合當(dāng)前瀏覽器的最佳通信信道,然后正常通信。毫無疑問,基于全雙工通信信道的Websocket/Flashsocket傳輸協(xié)議,是數(shù)據(jù)傳輸最為快速的選擇,僅僅需要一個長連接。

    基于上面圖表,我們在指定socket.io transport參數(shù)時,可以做到心里有數(shù)。

    在socketio-netty服務(wù)器端配置:

    transports = websocket,flashsocket,htmlfile,xhr-polling,jsonp-polling

    在客戶端,簡單定義地址:

    var socket = io.connect('http://localhost:9000');

    在不遠(yuǎn)的將來,桌面版瀏覽器可能升級了最新版本的websocket草案,導(dǎo)致客戶端原生的websocket協(xié)議無法被識別時,可使用Flashsocket作為替代品。但總會有一種通信協(xié)議墊底,可以保證正常的運(yùn)轉(zhuǎn)。       

     

    在線畫板示范

    一個聊天的示范實時的數(shù)據(jù)量不大,那么一個在線畫板應(yīng)用呢,大家所繪制的線和點能夠立刻的同步到所有人的屏幕上去。嗯,它還是跨越目前所見的瀏覽器(IE6+,F(xiàn)irefox,Opera,Safari,Chrome等),支持Phonegap構(gòu)建,支持iphone,android,ipad等。

    因為沒有部署的在線服務(wù)器,只能看一下簡單視頻了:

    服務(wù)器端實現(xiàn)也是很簡單,核心代碼不到100行(不包括main函數(shù)、日志輸出等):

    如何讓打包的android支持websocket協(xié)議,可參考:為Phonegap Android平臺增加websocket支持,使默認(rèn)成為socket.io首選通道選擇

    本人暫無JAVA主機(jī),無法部署到互聯(lián)網(wǎng)環(huán)境下。只能截個圖,看看先。

    項目演示代碼下載地址

     

    小結(jié)

    很顯然,實時Web,是一種技術(shù)趨勢,將成為一種人們的默認(rèn)技術(shù)選擇,用以拉近和桌面應(yīng)用的距離。
    socket.io是一種數(shù)據(jù)實時推送、事件驅(qū)動模型的框架,支持事件訂閱,簡單易用。其價值目前看來,還未被完整的挖掘出來。

    socket.io即提供了node.js服務(wù)器端(地址)又提供了客戶端(地址)的整體解決方案,而socketio-netty則是基于JAVA服務(wù)器端,支持最新socket.io client最新版規(guī)范。對JAVA編程人員來講,可以不用學(xué)習(xí)node.js,從而多了一個選擇。

    這里再解釋一下,為何構(gòu)建app而不是webapp的服務(wù)器端:

    1. Tomcat 7 雖然支持了Websocket協(xié)議,僅采用最新websocket草案版本
    2. Jetty 8 已經(jīng)支持Websocket,但才支持servlet 3.0規(guī)范
    3. 被綁定在某個單獨的Servlet容器上面,不為通用
    4. Servlet容器協(xié)議棧可能過于龐雜

    參考資料

    1. 實時Web時代即將到來:不只谷歌Twitter玩得起
      http://tech.qq.com/a/20120521/000296.htm

    posted on 2012-05-24 09:10 nieyong 閱讀(30236) 評論(5)  編輯  收藏 所屬分類: socket.io

    評論

    # re: 構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server 2012-05-24 20:29 rox

    不錯,收藏了!  回復(fù)  更多評論   

    # re: 構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server 2013-04-08 10:14 vajra

    int port = 9000;
    MainServer mainServer = new MainServer(port);
    mainServer.addNamespace("/chat", new DemoChatHandler());
    mainServer.addNamespace("/news", new DemoNewsHandler());
    mainServer.start();
    按namespace訪問,F(xiàn)lashsocket不起作用?如果namespace為空則正常。  回復(fù)  更多評論   

    # re: 構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server 2014-01-06 10:43 鄧子彪

    感謝樓主了,樓主威武啊  回復(fù)  更多評論   

    # re: 構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server 2014-01-07 13:51 鄧子彪

    我想在我的項目中加入socketio,但是我想用我項目中自己用的那個端口號,如何實現(xiàn)使得端口號不被占用而程序能運(yùn)行  回復(fù)  更多評論   

    # re: 構(gòu)建實時Web的JAVA選擇組合:socket.io client + socketio-netty server[未登錄] 2014-08-05 14:59 dd

    cool  回復(fù)  更多評論   

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2012年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产综合久久久久紧| 国产自国产自愉自愉免费24区| 免费a级毛片网站| 99久久成人国产精品免费| 久久精品国产精品亚洲艾草网| 国产精品免费网站| 一区二区三区AV高清免费波多| 91嫩草私人成人亚洲影院| 日韩高清在线免费观看| 成人精品一区二区三区不卡免费看| 亚洲国产日韩女人aaaaaa毛片在线 | 无码中文字幕av免费放| 国产亚洲精品美女久久久久| 亚洲AV日韩AV天堂一区二区三区| 性做久久久久久免费观看| 中文永久免费观看网站| 中文字幕亚洲男人的天堂网络| 亚洲最大AV网站在线观看| 99视频在线精品免费观看6| 免费在线观影网站| 美女的胸又黄又www网站免费| 亚洲网站在线播放| 国产亚洲成人在线播放va| 好先生在线观看免费播放| 精品成人免费自拍视频| 精品免费AV一区二区三区| 亚洲另类小说图片| 亚洲精品少妇30p| 免费国产真实迷j在线观看| 青青青国产在线观看免费网站| 最近免费字幕中文大全| 疯狂做受xxxx高潮视频免费| 色偷偷亚洲女人天堂观看欧| 亚洲AV日韩AV永久无码久久| 亚洲综合网站色欲色欲| 免费a级毛片永久免费| 成年大片免费视频| 国产一卡二卡四卡免费| 无码国产精品一区二区免费vr| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 免费a级毛片在线观看|