欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Tomcat實現(xiàn)WebSocket的方法

 更新時間:2016年11月30日 10:01:12   作者:汪洋之舟---seaboat  
WebSocket協(xié)議屬于HTML5標準,越來越多瀏覽器已經(jīng)原生支持WebSocket,它能讓客戶端和服務端實現(xiàn)雙向通信。這篇文章主要介紹了Tomcat實現(xiàn)WebSocket的方法的相關資料,需要的朋友可以參考下

 WebSocket協(xié)議屬于HTML5標準,越來越多瀏覽器已經(jīng)原生支持WebSocket,它能讓客戶端和服務端實現(xiàn)雙向通信。在客戶端和服務器端建立一條WebSocket連接后,服務器端消息可直接發(fā)送到客戶端,從而打破傳統(tǒng)的請求響應模式,避免了無意義的請求。比如傳統(tǒng)的方式可能會使用AJAX不斷請求服務器端,而WebSocket則可以直接發(fā)送數(shù)據(jù)到客戶端且客戶端不必請求。同時,由于有了瀏覽器的原生支持,編寫客戶端應用程序也變得更加便捷且不必依賴第三方插件。另外,WebSocket協(xié)議摒棄了HTTP協(xié)議繁瑣的請求頭,而是以數(shù)據(jù)幀的方式進行傳輸,效率更高。

圖為WebSocket協(xié)議通信的過程,首先客戶端會發(fā)送一個握手包告訴服務器端我想升級成WebSocket,不知道你服務器端是否同意,這時如果服務器端支持WebSocket協(xié)議則會返回一個握手包告訴客戶端沒問題,升級已確認。然后就成功建立起了一條WebSocket連接,該連接支持雙向通信,并且使用WebSocket協(xié)議的數(shù)據(jù)幀格式發(fā)送消息。

這里寫圖片描述

握手過程需要說明下,為了讓WebSocket協(xié)議能和現(xiàn)有HTTP協(xié)議Web架構(gòu)互相兼容,所以WebSocket協(xié)議的握手要基于HTTP協(xié)議,比如客戶端會發(fā)送類似如下的HTTP報文到服務器端請求升級為WebSocket協(xié)議,其中包含的Upgrade: websocket就是告訴服務器端我想升級協(xié)議:

GET ws://localhost:8080/hello HTTP/1.1
Origin: http://localhost:8080
Connection: Upgrade
Host: localhost:8080
Sec-WebSocket-Key: uRovscZjNol/umbTt5uKmw==
Upgrade: websocket
Sec-WebSocket-Version: 13

此時如果服務器端支持WebSocket協(xié)議,則它會發(fā)送一個同意客戶端升級協(xié)議的報文,具體報文類似如下,其中Upgrade: websocket就是告訴客戶端我同意你升級協(xié)議:

HTTP/1.1 101 WebSocket Protocol Handshake
Date: Fri, 10 Feb 2016 17:38:18 GMT
Connection: Upgrade
Server: Kaazing Gateway
Upgrade: WebSocket
Sec-WebSocket-Accept: rLHCkw/SKsO9GAH/ZSFhBATDKrU=

完成如上握手后,HTTP協(xié)議連接就被打破,接下去則是開始使用WebSocket協(xié)議進行雙方通信,這條連接還是原來的那條TCP/IP連接,端口也還是原來的80或443。

下面舉一個Tomcat中編寫WebSocket的簡單例子:

public class HelloWebSocketServlet extends WebSocketServlet {
private static List<MessageInbound> socketList = new ArrayList<MessageInbound>();
protected StreamInbound createWebSocketInbound(String subProtocol,HttpServletRequest request){
return new WebSocketMessageInbound();
}
public class WebSocketMessageInbound extends MessageInbound{
protected void onClose(int status){
super.onClose(status);
socketList.remove(this); 
}
protected void onOpen(WsOutbound outbound){
super.onOpen(outbound);
socketList.add(this);
}
@Override
protected void onBinaryMessage(ByteBuffer message) throws IOException {
}
@Override
protected void onTextMessage(CharBuffer message) throws IOException {
for(MessageInbound messageInbound : socketList){
CharBuffer buffer = CharBuffer.wrap(message);
WsOutbound outbound = messageInbound.getWsOutbound();
outbound.writeTextMessage(buffer);
outbound.flush(); 
}
}
}
}

這個Servlet必須要繼承WebSocketServlet,接著創(chuàng)建一個繼承MessageInbound的WebSocketMessageInbound類,在該類中填充onClose、onOpen、onBinaryMessage和onTextMessage等方法即可完成各個事件的邏輯,其中onOpen會在一個WebSocket連接建立時被調(diào)用,onClose會在一個WebSocket關閉時被調(diào)用,onBinaryMessage則是Binary方式下接收到客戶端數(shù)據(jù)時被調(diào)用,onTextMessage則是Text方式下接收到客戶端數(shù)據(jù)時被調(diào)用。上面一段代碼實現(xiàn)了一個廣播的效果。

按照上面的處理邏輯,Tomcat對WebSocket的集成就不會太難了,就是在處理請求時如果遇到WebSocket協(xié)議請求則做特殊處理,保持住連接并在適當?shù)臅r機調(diào)用WebSocketServlet的MessageInbound的onClose、onOpen、onBinaryMessage和onTextMessage等方法。由于WebSocket一般建議在NIO模式下使用,所以看看NIO模式集成WebSocket協(xié)議。

如圖,對于WebSocket的客戶端連接被接收器接收后注冊到NioChannel隊列中,Poller組件不斷輪休是否有NioChannel需要處理,如果有則經(jīng)過處理管道后進到繼承了WebSocketServlet的Servlet上,WebSocketServlet的doGet方法會處理WebSocket握手,告訴返回客戶端同意升級協(xié)議。往后Poller繼續(xù)不斷輪休相關NioChannel,一旦發(fā)現(xiàn)是使用WebSocket協(xié)議的管道則會調(diào)用MessageInbound的相關方法,完成不同事件的處理,從而實現(xiàn)對WebSocket協(xié)議的支持。

這里寫圖片描述

相關文章

  • tomcat服務安裝步驟及詳細配置實戰(zhàn)教程

    tomcat服務安裝步驟及詳細配置實戰(zhàn)教程

    Tomcat是由Apache開發(fā)的一個開源Java WEB應用服務器,下面這篇文章主要給大家介紹了關于tomcat服務安裝步驟及詳細配置實戰(zhàn)教程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • tomcat性能優(yōu)化之如何搭建Apr模塊

    tomcat性能優(yōu)化之如何搭建Apr模塊

    這篇文章主要介紹了tomcat性能優(yōu)化之如何搭建Apr模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Tomcat 7.0多端口配置詳解

    Tomcat 7.0多端口配置詳解

    這篇文章主要介紹了Tomcat 7.0多端口配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Tomcat 8.5 環(huán)境搭建步驟

    Tomcat 8.5 環(huán)境搭建步驟

    Tomcat是一個流行的開源Java Servlet容器,它提供了一個運行Java Web應用程序的平臺,本文將為您提供關于如何搭建Tomcat 8.5環(huán)境的詳細指南,感興趣的朋友一起看看吧
    2024-01-01
  • Tomcat如何配置訪問日志和線程數(shù)

    Tomcat如何配置訪問日志和線程數(shù)

    Tomcat是一個功能強大且易于使用的Java Servlet容器,適用于開發(fā)和部署各種類型的Java Web應用程序,本文主要介紹了Tomcat如何配置訪問日志和線程數(shù),以優(yōu)化性能并提高系統(tǒng)可靠性
    2023-11-11
  • 詳解Tomcat7中WebSocket初探

    詳解Tomcat7中WebSocket初探

    隨著Html5技術的普及,主流瀏覽器對HTML5標準的支持越來越好,利用瀏覽器原生支持WebSocket就可以輕松的實現(xiàn)上面的功能。有興趣的可以了解一下。
    2017-01-01
  • tomcat安裝及部署的方法實現(xiàn)

    tomcat安裝及部署的方法實現(xiàn)

    Tomcat是一個免費、開源的javaWeb輕量級應用服務器,本文主要介紹了tomcat安裝及部署的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • TOMCAT啟動失敗using?catalina_opts為空的解決方法

    TOMCAT啟動失敗using?catalina_opts為空的解決方法

    這篇文章主要給大家分享了TOMCAT啟動失敗using?catalina_opts為空的解決方法,文中有詳細的解決流程,具有一定的參考價值,需要的朋友可以參考下
    2023-10-10
  • 解決tomcat部署下的web項目網(wǎng)頁更改不能自動刷新的問題

    解決tomcat部署下的web項目網(wǎng)頁更改不能自動刷新的問題

    下面小編就為大家?guī)硪黄鉀Qtomcat部署下的web項目網(wǎng)頁更改不能自動刷新的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Apache?Tomcat服務部署網(wǎng)站的項目實踐

    Apache?Tomcat服務部署網(wǎng)站的項目實踐

    本文主要介紹了Apache?Tomcat服務部署網(wǎng)站的項目實踐,包括下載和安裝Tomcat,設置環(huán)境變量,配置server.xml文件,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08

最新評論