整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Django Web中的靜態(tài)文件之HTML5第1篇

          從小程序出來以后,H5更是火上加油,大熱了一把。沒錯,小程序就是居于H5開發(fā)出來的。可惜咱們這次講的不是小程序,而是講HTML5,簡稱H5。

          H5中的5,是版本號來的,它在HTML4的基礎(chǔ)上,進(jìn)行了大大的優(yōu)化。

          1

          H5去掉了HTML4上的雞肋標(biāo)簽,如:<acronym>、<acronym>、<big>、

          <basefont>、<center>、<dir>、<frame>、<frameset>、<noframes>等。新增了很多豐富的功能標(biāo)簽。

          以往需要借助第3方插件,如Flash ,才能實(shí)現(xiàn)的音頻和視頻功能,如今用HTML5<audio>、<video>標(biāo)簽便可實(shí)現(xiàn)。

          以上在Web上無法直接實(shí)現(xiàn)通訊的功能,如今用HTML5的WebSocket也可以實(shí)現(xiàn)了…

          2

          光說不練假把式,來點(diǎn)代碼試試,實(shí)現(xiàn)MP4的播放。視頻來源,自己隨便在網(wǎng)上找一個,建議找個短視頻,否則只顧欣賞影片,無心學(xué)習(xí)去了。

          <!DOCTYPE html>

          <html>

          <body>

          <video width="420" controls>

          <source src=" " type="video/mp4" />

          </video>

          </body>

          </html>

          需要在應(yīng)用程序中實(shí)現(xiàn)實(shí)時通信時,WebSocket是一個強(qiáng)大的協(xié)議,它可以在客戶端和服務(wù)器之間建立持久的雙向通信通道。本文將向您展示如何在Spring Boot應(yīng)用程序中集成WebSocket,實(shí)現(xiàn)實(shí)時通信的功能。

          介紹

          WebSocket是一種網(wǎng)絡(luò)通信協(xié)議,能在單個TCP連接上進(jìn)行全雙工通信。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,WebSocket API被W3C定為標(biāo)準(zhǔn)。WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要做一次握手,兩者之間就直接可以創(chuàng)建持久性連接并進(jìn)行數(shù)據(jù)傳輸。

          WebSocket原理

          WebSocket是HTML5中的一個新特性。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開始,WebSocket只是瀏覽器和服務(wù)器之間的一個簡單的TCP連接。當(dāng)連接建立后,服務(wù)器和瀏覽器都能主動向?qū)Ψ桨l(fā)送數(shù)據(jù)。

          WebSocket連接的過程包括以下幾個步驟:

          1.客戶端發(fā)送一個特殊的HTTP請求到服務(wù)器,這個請求中包含了一個“Upgrade: WebSocket”頭。

          2.服務(wù)器發(fā)送一個101響應(yīng),告訴客戶端其正在切換到WebSocket協(xié)議。

          3.一旦連接建立,客戶端和服務(wù)器就可以任意地發(fā)送和接收數(shù)據(jù),而不需要像HTTP請求那樣,每次都需要對方的響應(yīng)。

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

          以下是在Spring Boot中集成WebSocket并實(shí)現(xiàn)實(shí)時通信的詳細(xì)步驟:

          步驟1:創(chuàng)建Spring Boot項目

          首先,創(chuàng)建一個Spring Boot項目。您可以使用Spring Initializr或手動創(chuàng)建項目。

          步驟2:添加WebSocket依賴

          在`pom.xml`文件中添加WebSocket依賴:

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-websocket</artifactId>
          </dependency>

          步驟3:創(chuàng)建WebSocket配置類**

          創(chuàng)建一個WebSocket配置類,用于配置WebSocket的端點(diǎn)和處理程序。

          import org.springframework.context.annotation.Bean;
          import org.springframework.context.annotation.Configuration;
          import org.springframework.web.socket.server.standard.ServerEndpointExporter;
          
          @Configuration
          public class WebSocketConfig {
              @Bean
              public ServerEndpointExporter serverEndpointExporter() {
                  return new ServerEndpointExporter();
              }
          }

          步驟4:創(chuàng)建WebSocket處理程序

          創(chuàng)建一個WebSocket處理程序,處理WebSocket連接和消息。

          import javax.websocket.OnClose;
          import javax.websocket.OnError;
          import javax.websocket.OnMessage;
          import javax.websocket.OnOpen;
          import javax.websocket.Session;
          import javax.websocket.server.ServerEndpoint;
          
          @ServerEndpoint("/websocket")
          public class MyWebSocket {
              @OnOpen
              public void onOpen(Session session) {
                  // 當(dāng)客戶端連接時執(zhí)行
              }
          
              @OnMessage
              public void onMessage(String message, Session session) {
                  // 當(dāng)接收到客戶端消息時執(zhí)行
              }
          
              @OnClose
              public void onClose(Session session) {
                  // 當(dāng)客戶端斷開連接時執(zhí)行
              }
          
              @OnError
              public void onError(Throwable error) {
                  // 發(fā)生錯誤時執(zhí)行
              }
          }

          步驟5:前端頁面

          在前端頁面中,您可以使用JavaScript和WebSocket API來建立WebSocket連接,并發(fā)送和接收消息。

          <!DOCTYPE html>
          <html>
          <head>
              <title>WebSocket Example</title>
          </head>
          <body>
              <script>
                  var socket = new WebSocket("ws://localhost:8080/websocket");
          
                  socket.onopen = function(event) {
                      // 連接成功時執(zhí)行
                  };
          
                  socket.onmessage = function(event) {
                      var message = event.data;
                      // 接收到消息時執(zhí)行
                  };
          
                  socket.onclose = function(event) {
                      // 連接關(guān)閉時執(zhí)行
                  };
          
                  socket.onerror = function(error) {
                      // 發(fā)生錯誤時執(zhí)行
                  };
          
                  function sendMessage() {
                      var message = document.getElementById("message").value;
                      socket.send(message);
                  }
              </script>
          
              <input type="text" id="message">
              <button onclick="sendMessage()">Send</button>
          </body>
          </html>

          優(yōu)點(diǎn)

          使用WebSocket實(shí)現(xiàn)實(shí)時通信有以下優(yōu)點(diǎn):

          1. 實(shí)時性:與傳統(tǒng)的HTTP請求-響應(yīng)模式不同,WebSocket允許即時發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)實(shí)時性。

          2. 降低延遲:WebSocket連接保持打開狀態(tài),無需為每個請求建立新的連接,可以減少通信的延遲。

          3. 減少資源消耗:相比輪詢或長輪詢,WebSocket連接更高效,減少服務(wù)器資源消耗。

          4. 雙向通信:WebSocket支持雙向通信,客戶端和服務(wù)器都可以主動發(fā)送消息。

          適用場景

          WebSocket是一種強(qiáng)大的協(xié)議,適用于許多實(shí)時通信和互動應(yīng)用場景。以下是一些適用WebSocket的常見場景:

          1. 即時聊天應(yīng)用程序:WebSocket是構(gòu)建即時聊天應(yīng)用程序的理想選擇。它允許用戶實(shí)時發(fā)送和接收消息,支持私聊、群聊、在線狀態(tài)等功能。許多在線聊天應(yīng)用程序如Slack、WhatsApp、Facebook Messenger等都使用WebSocket來實(shí)現(xiàn)實(shí)時通信。

          2. 在線游戲:多人在線游戲(MMOG)通常需要實(shí)時的游戲狀態(tài)同步和玩家之間的實(shí)時互動。WebSocket可以用于在游戲客戶端和服務(wù)器之間實(shí)現(xiàn)實(shí)時通信,確保游戲體驗更加流暢和有趣。

          3. 實(shí)時協(xié)作工具:協(xié)作工具和團(tuán)隊合作平臺,如Google Docs、Microsoft Teams等,需要支持多人同時編輯和實(shí)時協(xié)作。WebSocket可用于同步用戶的編輯操作,確保協(xié)作工作在實(shí)時性方面表現(xiàn)出色。

          4. 實(shí)時數(shù)據(jù)監(jiān)控和通知:監(jiān)控和控制系統(tǒng)需要實(shí)時獲取傳感器數(shù)據(jù)、日志信息或事件通知。WebSocket可以用于推送實(shí)時數(shù)據(jù)和事件通知,使操作員能夠及時采取行動。

          5. 在線教育和遠(yuǎn)程培訓(xùn):在線教育平臺需要實(shí)時互動,包括教師和學(xué)生之間的語音、視頻、文檔共享和實(shí)時提問。WebSocket可以提供良好的實(shí)時互動體驗。

          6. 金融市場數(shù)據(jù):金融市場需要實(shí)時傳輸股票價格、貨幣匯率等數(shù)據(jù)。WebSocket可用于向交易員提供實(shí)時數(shù)據(jù)更新,以便他們做出即時決策。

          7. 社交媒體和新聞推送:社交媒體平臺和新聞網(wǎng)站可以使用WebSocket向用戶推送最新的帖子、評論、新聞和通知,使用戶保持更新。

          8. 實(shí)時地理位置跟蹤:實(shí)時地理位置跟蹤應(yīng)用程序,如共享單車、地圖導(dǎo)航、物流追蹤等,需要將實(shí)時位置信息傳輸給服務(wù)器并實(shí)時顯示給用戶。

          總之,WebSocket適用于需要實(shí)時通信和互動的各種應(yīng)用場景。它可以改善用戶體驗,提高應(yīng)用程序的實(shí)時性,并支持多種實(shí)時功能。使用WebSocket,您可以構(gòu)建更加動態(tài)和交互性的Web應(yīng)用程序。

          總結(jié)

          WebSocket是一種強(qiáng)大的協(xié)議,可以實(shí)現(xiàn)實(shí)時通信,適用于多種應(yīng)用場景。通過Spring Boot的支持,您可以輕松集成WebSocket,并在應(yīng)用程序中實(shí)現(xiàn)實(shí)時通信功能。WebSocket的優(yōu)點(diǎn)包括實(shí)時性、降低延遲、減少資源消耗和雙向通信。希望本文對您理解Spring Boot集成WebSocket和實(shí)時通信有所幫助,為您的應(yīng)用程序增加更多交互和實(shí)時性。開始使用WebSocket,讓您的應(yīng)用程序更加互動!

          ebSocket 和 Socket 的區(qū)別就像Java和JavaScript,并沒有什么太大的關(guān)系,但又不能說完全沒關(guān)系。可以這么說:

          • 命名方面,Socket是一個深入人心的概念,WebSocket借用了這一概念;
          • 使用方面,完全兩個東西。

          Java和JavaScript的關(guān)系

          當(dāng)我們探討兩件事物的區(qū)別和聯(lián)系時,我們想探討些什么?

          對這個問題最直接的解決方法應(yīng)該是去了解Socket和WebSocket的來源和用法,那么它們的區(qū)別和聯(lián)系就不言自明了。

          Socket

          Socket可以有很多意思,和IT較相關(guān)的本意大致是指在端到端的一個連接中,這兩個端叫做Socket。對于IT從業(yè)者來說,它往往指的是TCP/IP網(wǎng)絡(luò)環(huán)境中的兩個連接端,大多數(shù)的API提供者(如操作系統(tǒng),JDK)往往會提供基于這種概念的接口,所以對于開發(fā)者來說也往往是在說一種編程概念。同時,操作系統(tǒng)中進(jìn)程間通信也有Socket的概念,但這個Socket就不是基于網(wǎng)絡(luò)傳輸層的協(xié)議了。

          Unix 中的 Socket

          操作系統(tǒng)中也有使用到Socket這個概念用來進(jìn)行進(jìn)程間通信,它和通常說的基于TCP/IP的Socket概念十分相似,代表了在操作系統(tǒng)中傳輸數(shù)據(jù)的兩方,只是它不再基于網(wǎng)絡(luò)協(xié)議,而是操作系統(tǒng)本身的文件系統(tǒng)。

          網(wǎng)絡(luò)中的 Socket

          通常所說的Socket API,是指操作系統(tǒng)中(也可能不是操作系統(tǒng))提供的對于傳輸層(TCP/UDP)抽象的接口。現(xiàn)行的Socket API大致都是遵循了BSD Socket規(guī)范(包括Windows)。這里稱規(guī)范其實(shí)不太準(zhǔn)確,規(guī)范其實(shí)是POSIX,但BSD Unix中對于Socket的實(shí)現(xiàn)被廣為使用,所以成為了實(shí)際的規(guī)范。如果你要使用HTTP來構(gòu)建服務(wù),那么就不需要關(guān)心Socket,如果你想基于TCP/IP來構(gòu)建服務(wù),那么Socket可能就是你會接觸到的API。

          在TCP/IP網(wǎng)絡(luò)中HTTP的位置

          從上圖中可以看到,HTTP是基于傳輸層的TCP協(xié)議的,而Socket API也是,所以只是從使用上說,可以認(rèn)為Socket和HTTP類似(但一個是成文的互聯(lián)網(wǎng)協(xié)議,一個是一直沿用的一種編程概念),是對于傳輸層協(xié)議的另一種直接使用,因為按照設(shè)計,網(wǎng)絡(luò)對用戶的接口都應(yīng)該在應(yīng)用層。

          Socket 名稱的由來

          和很多其他Internet上的事物一樣,Socket這個名稱來自于大名鼎鼎的ARPANET(Advanced Research Projects Agency),早期ARPANET中的Socket指的是一個源或者目的地址——大致就是今天我們所說的IP地址和端口號。最早的時候一個Socket指的是一個40位的數(shù)字(RFC33中說明了此用法,但在RFC36中并沒有明確地說使用40位數(shù)字來標(biāo)識一個地址),其中前32為指向的地址(socket number,大致相當(dāng)于IP),后8位為發(fā)送數(shù)據(jù)的源(link,大致相當(dāng)于端口號)。對他們的叫法有很多的版本,這里列舉的并不嚴(yán)謹(jǐn)。

          領(lǐng)取C++音視頻開發(fā)學(xué)習(xí)資料:點(diǎn)擊→音視頻開發(fā)(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

          端口號的野史

          隨著ARPANET的發(fā)展,后來(RFC433,Socket Number List)socket number被明確地定義為一個40位的數(shù)字,其中后8位被用來制定某個特定的應(yīng)用使用(比如1是Telnet)。這8位數(shù)有很多名字:link、socket name、AEN(another eight number,看到這個名字我也是醉了),工程師逗逼起來也是挺拼的。

          后來在Internet的規(guī)范制定中,才真正的用起了port number這個詞。至于為什么端口號是16位的,我想可能有兩個原因,一是對于當(dāng)時的工程師來說,如果每個端口號來標(biāo)識一個程序,65535個端口號也差不多夠用了。二可能是為了對齊吧,^_^!!。


          Socket 原本的意思

          在上邊提到的歷史中使用到的Socket,包括TCP文檔中使用到的Socket,其實(shí)指的是網(wǎng)絡(luò)傳輸中的一端,是一個虛擬化的概念。


          WebSocket

          上邊簡單敘述了Socket的意義,由于年代久遠(yuǎn),很多事情也搞不了那么清楚。但WebSocket是一個很晚近的東西,可以讓我們看到它是如何成為現(xiàn)在我們看到的這個樣子的。


          WHATWG(Web Hypertext Application Technology Working Group)

          關(guān)于HTML5的故事很多人都是知道的,w3c放棄了HTML,然后有一群人(也有說是這些人供職的公司,不過官方的文檔上是說的個人)創(chuàng)立了WHATWG組織來推動HTML語言的繼續(xù)發(fā)展,同時,他們還發(fā)展了很多關(guān)于Web的技術(shù)標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)不斷地被官方所接受。WebSocket就屬于WHATWG發(fā)布的Web Application的一部分(即HTML5)的產(chǎn)物。


          為什么會有 WebSocket

          大約在08年的時候,WG的工程師在討論網(wǎng)絡(luò)環(huán)境中需要一種全雙工的連接形式,剛開始一直叫做「TCPConnection」,并討論了這種協(xié)議需要支持的功能,大致已經(jīng)和我們今天看到的WebSocket差不多了。他們認(rèn)為基于現(xiàn)有的HTTP之上的一些技術(shù)(如長輪詢、Comet)并滿足不了這種需求,有必要定義一個全新的協(xié)議。


          名稱的由來

          在很多的關(guān)于HTML5或者WebSocket的文檔中,都能看到一個名字,Hixie(Ian Hickson),他是WHATWG組織的發(fā)言人,曾供職于Netscape、Opera、Google,看工作的公司就知道這個人的背景了。

          08年6月18日,一群WHATWG的工程師在討論一些技術(shù)問題,一個工程師提到說「我們之前討論的那個東西,不要叫TCPConnection 了,還是起個別的名字吧 」,接著幾個名字被提及,DuplexConnection,TCPSocket,SocketConnection ,一個叫mcarter(Michael Carter )的工程師說他馬上要寫一篇關(guān)于Comet的文章,如果可以確定這個名稱,想在文章中引用這個名字。

          Socket一直以來都被人用來表示網(wǎng)絡(luò)中一個連接的兩端,考慮到怎么讓工程師更容易接受,后來Hixie說了一句「我看WebSocket這個名字就很適合嘛(Hixie briefly pops back online to record that “WebSocket” would probably be a good new name for the TCPConnection object)」,大家都沒有異議,緊接著mcarter在Comet Daily中發(fā)表了文章Independence Day: HTML5 WebSocket Liberates Comet From Hacks,后來隨著各大瀏覽器對WebSocket的支持,它變成了實(shí)際的標(biāo)準(zhǔn),IETF也沿用了這個名字。

          下邊是在WHATWG文檔中對WebSocket接口的定義

              enum BinaryType { "blob", "arraybuffer" };
          
              [Constructor(USVString url, optional (DOMString or sequence<DOMString>) protocols = []), Exposed=(Window,Worker)]
          
              interface WebSocket : EventTarget {
          
                readonly attribute USVString url;
          
               
          
                // ready state
          
                const unsigned short CONNECTING = 0;
          
                const unsigned short OPEN = 1;
          
                const unsigned short CLOSING = 2;
          
                const unsigned short CLOSED = 3;
          
                readonly attribute unsigned short readyState;
          
                readonly attribute unsigned long long bufferedAmount;
          
               
          
                // networking
          
                attribute EventHandler onopen;
          
                attribute EventHandler onerror;
          
                attribute EventHandler onclose;
          
                readonly attribute DOMString extensions;
          
                readonly attribute DOMString protocol;
          
                void close([Clamp] optional unsigned short code, optional USVString reason);
          
               
          
                // messaging
          
                attribute EventHandler onmessage;
          
                attribute BinaryType binaryType;
          
                void send(USVString data);
          
                void send(Blob data);
          
                void send(ArrayBuffer data);
          
                void send(ArrayBufferView data);
          
              };

          內(nèi)容的確定

          大多數(shù)新技術(shù)的出現(xiàn)都是建立在已有技術(shù)的鋪墊之上的,WebSocket內(nèi)容的確定也是如此,其中就有Comet看不到的貢獻(xiàn),Comet是一個很有趣的技術(shù),有興趣可以看看這里


          結(jié)論

          可以把WebSocket想象成HTTP,HTTP和Socket什么關(guān)系,WebSocket和Socket就是什么關(guān)系。


          主站蜘蛛池模板: 日本免费电影一区二区 | 亚洲乱码一区二区三区在线观看| 中文字幕永久一区二区三区在线观看 | 国产免费av一区二区三区| а天堂中文最新一区二区三区| 99在线精品一区二区三区| 日本精品少妇一区二区三区| 国产日本亚洲一区二区三区| 中文字幕一区二区三区乱码| 国产成人精品一区二三区在线观看 | 国产精品久久无码一区二区三区网| 无码人妻精品一区二区蜜桃百度| 91精品国产一区二区三区左线| 日韩人妻无码一区二区三区久久99 | 制服中文字幕一区二区| 精品国产一区二区三区久久狼 | 亚洲人成网站18禁止一区| 亚洲av无码一区二区乱子伦as| 蜜桃臀无码内射一区二区三区| 亚洲欧美国产国产一区二区三区| 国产天堂在线一区二区三区| 农村人乱弄一区二区| 无码中文人妻在线一区二区三区| 国产一区二区三区在线免费观看| 狠狠色婷婷久久一区二区三区 | 国产韩国精品一区二区三区| 色一乱一伦一图一区二区精品| 伊人无码精品久久一区二区| 中日av乱码一区二区三区乱码| 色综合视频一区二区三区44| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 91午夜精品亚洲一区二区三区| 国产伦精品一区三区视频| 精品国产一区二区三区不卡| 伦理一区二区三区| 激情内射亚州一区二区三区爱妻| 精品日韩一区二区三区视频| 亚洲av无码一区二区三区观看| 中文字幕VA一区二区三区| 国产精品亚洲一区二区三区 | 久久精品无码一区二区app|