成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

websocket+sockjs+stompjs詳解及實(shí)例

Corwien / 2688人閱讀

摘要:面向消息的簡(jiǎn)單文本協(xié)議。為提供了備選方案。但無論哪種場(chǎng)景,對(duì)于實(shí)際應(yīng)用來說,這種通信形式層級(jí)過低。協(xié)議,來為瀏覽器和間的通信增加適當(dāng)?shù)南⒄Z義。協(xié)議解決了瀏覽器發(fā)起請(qǐng)求以及服務(wù)器響應(yīng)請(qǐng)求的細(xì)節(jié),假設(shè)協(xié)議并不存在,只能使用套接字來編寫應(yīng)用。

最近有項(xiàng)目需求要用到websocket,剛開始以為很簡(jiǎn)單,但是隨著遇到問題,深入了解,才知道websocket并不是想象中的那么簡(jiǎn)單,這篇文章主要是考慮websocket在客戶端的使用。

1.http與websocket

http超文本傳輸協(xié)議,大家都非常熟悉,http有1.0、1.1、 2.0幾個(gè)版本,從http1.1起,默認(rèn)都開啟了Keep-Alive,保持連接持續(xù)性,簡(jiǎn)單地說,當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸http數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接,這樣就降低了資源的消耗優(yōu)化性能,但是Keep-Alive也是有時(shí)間限制的,還有一個(gè)客戶端只能主動(dòng)發(fā)起請(qǐng)求才能獲取返回?cái)?shù)據(jù),并不能主動(dòng)接收后臺(tái)推送的數(shù)據(jù),websocket便應(yīng)運(yùn)而生。

websocket 是 html5
新增加特性之一,目的是瀏覽器與服務(wù)端建立全雙工的通信方式,解決 http 請(qǐng)求-響應(yīng)帶來過多的資源消耗,同時(shí)對(duì)特殊場(chǎng)景應(yīng)用提供了全新的實(shí)現(xiàn)方式,比如聊天、股票交易、游戲等對(duì)對(duì)實(shí)時(shí)性要求較高的行業(yè)領(lǐng)域。

http與websocket都是基于TCP(傳輸控制協(xié)議)的,websocket可以看做是對(duì)http協(xié)議的一個(gè)補(bǔ)充

2.SockJs

SockJS是一個(gè)JavaScript庫,為了應(yīng)對(duì)許多瀏覽器不支持WebSocket協(xié)議的問題,設(shè)計(jì)了備選SockJs。SockJS 是 WebSocket 技術(shù)的一種模擬。SockJS會(huì)盡可能對(duì)應(yīng) WebSocket API,但如果WebSocket 技術(shù)不可用的話,會(huì)自動(dòng)降為輪詢的方式。

3.Stompjs

STOMP—— Simple Text Oriented Message Protocol——面向消息的簡(jiǎn)單文本協(xié)議。
SockJS 為 WebSocket 提供了 備選方案。但無論哪種場(chǎng)景,對(duì)于實(shí)際應(yīng)用來說,這種通信形式層級(jí)過低。 STOMP協(xié)議,來為瀏覽器 和 server 間的 通信增加適當(dāng)?shù)南⒄Z義。

4.WebSocket、SockJs、STOMP三者關(guān)系

簡(jiǎn)而言之,WebSocket 是底層協(xié)議,SockJS 是WebSocket 的備選方案,也是底層協(xié)議,而 STOMP 是基于 WebSocket(SockJS)的上層協(xié)議。

1、HTTP協(xié)議解決了 web 瀏覽器發(fā)起請(qǐng)求以及 web 服務(wù)器響應(yīng)請(qǐng)求的細(xì)節(jié),假設(shè) HTTP 協(xié)議 并不存在,只能使用 TCP 套接字來 編寫 web 應(yīng)用。

2、直接使用 WebSocket(SockJS) 就很類似于 使用 TCP 套接字來編寫 web 應(yīng)用,因?yàn)闆]有高層協(xié)議,就需要我們定義應(yīng)用間所發(fā)送消息的語義,還需要確保連接的兩端都能遵循這些語義;

3、同HTTP在TCP 套接字上添加請(qǐng)求-響應(yīng)模型層一樣,STOMP在WebSocket 之上提供了一個(gè)基于幀的線路格式層,用來定義消息語義;

5.使用實(shí)例

安裝 sockjs-client、stompjs;在這兒要注意一下,我在
"stompjs": "^2.3.3"這個(gè)版本發(fā)現(xiàn),引入stompjs會(huì)報(bào)一個(gè)
net模塊找不到,需要在stompjs模
塊根目錄下執(zhí)行npm install net,這個(gè)是個(gè)奇葩的問題。
引入模塊:

import SockJS from "sockjs-client";
import Stomp from "stompjs";

// 連接函數(shù)
let number = 1;
function reconnect(socketUrl) {
    let url = `${BASE_URL}/ws/sdfpoint`; //連接地址
    // 建立連接對(duì)象(還未發(fā)起連接)
    let socket = new SockJS(url);
    // 獲取 STOMP 子協(xié)議的客戶端對(duì)象
    let stompClient = Stomp.over(socket);
    // 向服務(wù)器發(fā)起websocket連接并發(fā)送CONNECT幀
    stompClient.connect(
        {},//可添加客戶端的認(rèn)證信息
        function connectCallback (){//連接成功的回調(diào)函數(shù)
            //訂閱頻道
            stompClient.subscribe("/topic/display/control", function(data){
                if (data) {
                    console.log("subscribe data",data);
                }
            })
        },
        function errorCallBack(error){  
        //連接失敗時(shí)再次調(diào)用函數(shù)
            number += 1;
            if(number<=10){
                reconnect(url);
            }
            console.log("error",error);
        }
    )     
}

總結(jié):websocket 的實(shí)現(xiàn)客戶端看起來比較簡(jiǎn)單,但是需要與后臺(tái)進(jìn)行很好的配合和調(diào)試才能達(dá)到最佳效果。通過SockJS、Stomp來進(jìn)行瀏覽器兼容,增加消息語義,增強(qiáng)了可用性。要徹底搞懂websocket,我們還需要深入了解一些底層的原理以及相關(guān)的知識(shí)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/114328.html

相關(guān)文章

  • websocket+sockjs+stompjs詳解實(shí)例

    摘要:面向消息的簡(jiǎn)單文本協(xié)議。為提供了備選方案。但無論哪種場(chǎng)景,對(duì)于實(shí)際應(yīng)用來說,這種通信形式層級(jí)過低。協(xié)議,來為瀏覽器和間的通信增加適當(dāng)?shù)南⒄Z義。協(xié)議解決了瀏覽器發(fā)起請(qǐng)求以及服務(wù)器響應(yīng)請(qǐng)求的細(xì)節(jié),假設(shè)協(xié)議并不存在,只能使用套接字來編寫應(yīng)用。 最近有項(xiàng)目需求要用到websocket,剛開始以為很簡(jiǎn)單,但是隨著遇到問題,深入了解,才知道websocket并不是想象中的那么簡(jiǎn)單,這篇文章主要是...

    remcarpediem 評(píng)論0 收藏0
  • websocket+sockjs+stompjs詳解實(shí)例

    摘要:面向消息的簡(jiǎn)單文本協(xié)議。為提供了備選方案。但無論哪種場(chǎng)景,對(duì)于實(shí)際應(yīng)用來說,這種通信形式層級(jí)過低。協(xié)議,來為瀏覽器和間的通信增加適當(dāng)?shù)南⒄Z義。協(xié)議解決了瀏覽器發(fā)起請(qǐng)求以及服務(wù)器響應(yīng)請(qǐng)求的細(xì)節(jié),假設(shè)協(xié)議并不存在,只能使用套接字來編寫應(yīng)用。 最近有項(xiàng)目需求要用到websocket,剛開始以為很簡(jiǎn)單,但是隨著遇到問題,深入了解,才知道websocket并不是想象中的那么簡(jiǎn)單,這篇文章主要是...

    keithyau 評(píng)論0 收藏0
  • Vue+websocket+stompjs 實(shí)時(shí)監(jiān)控坐席狀態(tài)demo

    摘要:之后坐席狀態(tài)改變,可以看到有事件推送過來。關(guān)于的重連程序后服務(wù)端使用這里我直接引用我的另一個(gè)項(xiàng)目的部分代碼,這個(gè)沒有使用,直接使用瀏覽器原生的。重連的原理很簡(jiǎn)單,就是檢測(cè)到斷開時(shí),去調(diào)用我的方法,這里我也做了重連的次數(shù)限制。 由于是前后端分離的demo, 程序的后端我不管,我只負(fù)責(zé)把前端做好,這只是個(gè)demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結(jié)構(gòu)現(xiàn)在也...

    yankeys 評(píng)論0 收藏0
  • Vue+websocket+stompjs 實(shí)時(shí)監(jiān)控坐席狀態(tài)demo

    摘要:之后坐席狀態(tài)改變,可以看到有事件推送過來。關(guān)于的重連程序后服務(wù)端使用這里我直接引用我的另一個(gè)項(xiàng)目的部分代碼,這個(gè)沒有使用,直接使用瀏覽器原生的。重連的原理很簡(jiǎn)單,就是檢測(cè)到斷開時(shí),去調(diào)用我的方法,這里我也做了重連的次數(shù)限制。 由于是前后端分離的demo, 程序的后端我不管,我只負(fù)責(zé)把前端做好,這只是個(gè)demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結(jié)構(gòu)現(xiàn)在也...

    EdwardUp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<