精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Tomcat 7 中的 WebSocket
在Tomcat7.0.27版本中,apache給出了WebSocket的實現,這項功能是很多Tomcat用戶一直期望的,而如今,這項功能有了。現在上我們簡單的看一下什么是WebSockets,WebSockets有什么特性和限制,以及Tomcat7如何實現的。

什么是WebSockets?

    WebSocket是下一代web通信的協議,他有以下特點:
    ·整頁重新加載
    ·使用Ajax處理重新加載組件
    · Comet 通信
    類似于AJAX,但在服務器上不長時間持有線程。 
    TCP雙向通信
    上面羅列的每一種特性都有優點和缺點,Tomcat6使用Comet處理機制通過HTTP實現了雙向通信。這種實現允許異步事件驅動和雙向通信,但是這種實現有一些限制:
    ·由于HTTP是基于請求/相應的,不是一個雙向協議,代理和其他的中介機制可能無法正常運行,而且在任何特定的時間點,只能單向傳輸。
    ·對于服務器端開發者來說,引入多線程開發模型會變得更加困難。
    ·由于不是標準的API,會導致沒有統一接口。
    Servlet3.0引入了一個新的功能叫做異步servlet,Servlet 接收到請求之后,可能首先需要對請求攜帶的數據進行一些預處理;接著,Servlet 線程將請求轉交給一個異步線程來執行業務處理,線程本身返回至容器,此時 Servlet 還沒有生成響應數據,異步線程處理完業務以后,可以直接生成響應數據(異步線程擁有 ServletRequest 和ServletResponse 對象的引用),或者將請求繼續轉發給其它 Servlet。如此一來, Servlet 線程不再是一直處于阻塞狀態以等待業務邏輯的處理,而是啟動異步線程之后可以立即返回。 
    這個特性要比tomcat的comet處理機制強大。而這是一個標準的Servlet API,在其基礎上建立通用開發框架是非常容易的。
    異步的servlet雖然解決了一部分網絡通信的需求,但是由于其缺乏雙向通信的支持,使其的適用范圍仍然有限。
    WebSocket是另外一種嘗試通過HTTP支持異步、事件驅動和雙向通信的規范協議。其標準化的一個形式是JavaScript API。現在缺乏一個標準的服務器端API,Servlet3.1的專家小組正在積極的研究對此的一些基層的支持,這也是我寫這篇文章的原因。
    WebSocket 是否將演變成一個完整完備的WebSocket API仍有待觀察。在此期間主要的的Servlet容器都只是支持非標準的API,Tomcat也不例外。

WebSocket給我們帶來了什么?

    現在讓我們來了解一下一個WebSocket 實現給我們帶來了什么?
    ·通過HTTP端口實現的upgrading/switching協議雙向通信。
    ·以消息或者幀的方式通信。
    ·可以在稍作調整的代理或者其他的中介機制下工作。

WebSocket看起來是什么樣的?

    從協議層面上看,WebSocket在HTTP協議的基礎上使用“”Upgrade:WebSocket ”將HTTP協議升級為WebSocket協議。這使得代理可以通過一些調整得以良好支持。一個WebSocket請求看起來如下:
1GET /chat HTTP/1.1
2Host: server.example.com
3Upgrade: websocket
4Connection: Upgrade
5Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
6Origin: http://example.com
7Sec-WebSocket-Protocol: chat, superchat
8Sec-WebSocket-Version: 13

 

要理解這個“Connection:upgrade ”請求頭請看服務器端返回的response包含如下信息:
1HTTP/1.1 101
2Switching Protocols
3Upgrade: websocket
4Connection: Upgrade
5Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

 

    現在表明協議轉換得到了許可,在此握手完成后,服務器和客戶端就脫離請求/應答模式,開始以socket方式彼此獨立的通信。

WebSocket解決了之前comet實現的所有限制么?

    簡單的回答:沒有。第一,代理和中介機制在不做出調整的情況下可能仍然無法工作,所以在廣域網(WAN)部署是有問題的。第二、現在仍然沒有標準的JavaAPI支持它。然而WebSocket會在周圍的輿論壓力下逐漸解決這些問題。
    另外需要注意的一點就是,每一個HTTP/TCP連接都需要初始握手,并引入一個雙向的消息往返,甚至是在你發送或者接受WebSocket協議數據之前。如果你忽視這點,這些很短的影響也會使你的WebSocket開銷變得很大。不過總的來講,WebSocket仍然是客戶端與服務器之間長連接的理想解決辦法。
    一個好消息是,WebSocket比其他之前嘗試強化Web通信的解決辦法得到了更多關注,尤其是客戶端方面和跨語言支持方面,這也使得WebSocket收益很多,正在快速成長。WebSocket的另一個關于雙向通信的競爭對手是SPDY,而Tomcat對SPDY的支持也正在開發中。

總結

    WebSocket的雙向通信是直接通過HTTP實現的。WebSocket API是HTML5規范的一部分,目前為止,由于規范只是草案,不同的服務器實現不同,支持也會有差異。開發WebSocket會有一定的風險,因為Java的API尚未標準化。此外,WebSocket可能無法良好的在代理和中介機制下工作。但重要的是WebSocket利用HTTP的協議升級,完成了請求/響應到TCP連接的轉換。這就給未來的代理機制了一個選擇,可以選擇在廣域網支持WebSocket與否。
Tomcat7.0.27是Tomcat發布的第一個支持WebSocket的版本。
OSChina.NET/原創翻譯,原文鏈接
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WebSocket實現簡單的web聊天室
[Playframework文檔中文翻譯]Play!中使用HTTP異步編程
PHP開發者的福音,解讀PHP異步通信框架Swoole的機制
WebSocket是什么原理?為什么可以實現持久連接?
初識webSocket及其使用
Cleora
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 吉安市| 新乐市| 文登市| 民乐县| 湖州市| 赤城县| 镇雄县| 安多县| 江华| 额敏县| 揭东县| 田阳县| 丰顺县| 台中县| 修武县| 苍南县| 镇康县| 方山县| 江陵县| 报价| 长岛县| 陇川县| 凉城县| 淮阳县| 青海省| 穆棱市| 奉新县| 太仆寺旗| 文化| 黎川县| 宁海县| 新邵县| 桐梓县| 堆龙德庆县| 东乌珠穆沁旗| 昔阳县| 历史| 比如县| 房山区| 东宁县| 融水|