NFH.009 - Web Worker與Web Socket


12.22學(xué)習(xí)經(jīng)驗(yàn)分享#

Bruce_Zhu于2016.12.23


一、Web Worker

  1. Web Worker是 運(yùn)行在后臺的javascript,也就是說worker其實(shí)就是就一個(gè)js文件對象,worker可以讓他所包含的js代碼運(yùn)行在后臺

  2. 特點(diǎn):

    1)充分利用多核CPU的優(yōu)勢
    2)對多線程支持非常好
    3)不會影響頁面的性能
    4)不能訪問web頁面和DOM API
    5)所有的主流瀏覽器均支持web worker,除了Internet Explorer

    BOM+DOM+ECMAScipt

  3. Worker提供API

    1)檢測當(dāng)前瀏覽器是否支持Worker

    typeof(Worker) !== "undefined"

    2)創(chuàng)建Worker文件

    創(chuàng)建普通的 JS 文件,都可以用于 Web Worker 文件

    3)創(chuàng)建Web Worker對象

    var worker = new Worker("myTime.js");
    
    參數(shù)就是在第二步創(chuàng)建的js文件的路徑
    

    4)worker事件

    onmessage事件

     用于監(jiān)聽 Web Worker 傳遞消息,通過回調(diào)函數(shù)接收傳遞的消息,通過回調(diào)函數(shù)的事件對象data 屬性可以獲取傳遞的消息
    

    postMessage()

     w.postMessage( “worker success.” );
    
     通過postMessage() 方法傳遞消息內(nèi)容
    

    w.terminate();

     在HTML頁面中,通過調(diào)用 Web Worker 對象的terminate( ) 方法終止 Web Worker。
    

    創(chuàng)建WebWorker對象
    Worker對象

    onmessage事件,當(dāng)執(zhí)行postMessage事件時(shí)會觸發(fā)
    postMessage()方法
    terminate()方法

二、Web存儲API

  1. 對于任何程序來說,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲是必備功能之一,并且在需要的時(shí)候能夠提供數(shù)據(jù)。但在過去的Web客戶端,沒有能夠支持?jǐn)?shù)據(jù)存儲的有效機(jī)制,cookie曾用來在客戶端存儲少量信息,但受其性質(zhì)所限,cookie只能存儲一些短的字符串

  2. 在HTML5中提供了Web存儲API,它是在cookie之上的增強(qiáng)。這個(gè)API允許我們在用戶的硬盤上存儲數(shù)據(jù),并在日后使用這些數(shù)據(jù)。

  3. API可以分成兩個(gè)部分:

    1)信息必須且只在會話過程中使用—sessionStorage

    當(dāng)瀏覽器窗口關(guān)閉時(shí),數(shù)據(jù)全部丟失

    2)信息必須長期保存且由用戶決定時(shí)長—localStorage

    關(guān)閉瀏覽器窗口時(shí),數(shù)據(jù)繼續(xù)使用

    數(shù)據(jù)只能由用戶刪除

三、sessionStorage

  1. sessionStorage這部分API就像是會話cookie的替代。

  2. cookie以及sessionStorage都是在特定的時(shí)間段內(nèi)保持?jǐn)?shù)據(jù)可用。但cookie使用瀏覽器作為引用,而sessionStorage使用單個(gè)窗口作為引用,這就意味著,窗口關(guān)閉之后,sessionStorage就不能再使用。

  3. 方法

1)設(shè)置數(shù)據(jù)
   
   setItem(key,value)

   key - 作為存儲數(shù)據(jù)的唯一標(biāo)識
   value - 存儲的數(shù)據(jù)內(nèi)容(number/string)

2) 根據(jù)標(biāo)識獲取數(shù)據(jù)

   var value = getItem(key);
   
3) 刪除指定標(biāo)識的數(shù)據(jù)

    removeItem(key);

4)將存儲系統(tǒng)的所有數(shù)據(jù)刪除

    clear()

5)根據(jù)索引值返回key

     var key = key(index);
  1. 屬性

    返回當(dāng)前存儲系統(tǒng)的數(shù)據(jù)個(gè)數(shù)

    length

四、localStorage

  1. 提供的屬性和方法與sessionstorage一致

  2. storage事件

    實(shí)現(xiàn)多個(gè)窗口之間共享數(shù)據(jù)內(nèi)容

    問題:

    數(shù)據(jù)安全性低
    目前除Safari瀏覽器支持該事件,其他瀏覽器不支持

五、Web socket

  1. 網(wǎng)絡(luò)協(xié)議

    客戶端與服務(wù)端進(jìn)行通信的協(xié)議

    HTTP協(xié)議 - 目前互聯(lián)網(wǎng)中最廣泛的協(xié)議
    SOCKET協(xié)議 - 應(yīng)用于實(shí)時(shí)即時(shí)通信

  2. HTTP協(xié)議的問題

    1)無狀態(tài)

    本次客戶端的請求,服務(wù)器端不知道客戶端的上次請求

    2)短連接

    指通訊雙方有數(shù)據(jù)交互時(shí),就建立一個(gè)連接,數(shù)據(jù)發(fā)送完成后,則斷開此連接,即每次連接只完成一項(xiàng)業(yè)務(wù)的發(fā)送。

  1. web Socket

    實(shí)現(xiàn)了用HTTP不容易實(shí)現(xiàn)的服務(wù)器端的數(shù)據(jù)推送等智能通訊技術(shù)

  2. Web Socket的特點(diǎn)

    1)這個(gè)連接是實(shí)時(shí)的,也是永久的
    2)服務(wù)端可以主動(dòng)推送消息
    3)服務(wù)端不需要輪詢客戶端的請求
    4)服務(wù)器端與客戶端之間通信無需重新建立連接

  3. 使用WorkerMan,設(shè)置socket客戶端

    1)設(shè)置php環(huán)境變量

    2)下載并解壓workerMan

    http://www.workerman.net/workerman
    
    workerMan學(xué)習(xí)文檔
    
    http://doc3.workerman.net/getting-started/simple-example.html
    

    3)在任意位置創(chuàng)建http_test.php文件,并將課件中的start.text文件中內(nèi)容復(fù)制到該文件中(位置任意,能引用到Workerman文件中的Autoloader.php即可

    1. 運(yùn)行上建的文件,啟動(dòng)workerMan

      執(zhí)行workerMan

六、Web socket的使用

  1. 調(diào)用 WebSocket 對象的構(gòu)造器來建立與服務(wù)器之間的通信連接

    var webSocket = new WebSocket (“ws://127.0.0.1: 8005/socket”) ;

    請求地址(url)不能再是http://開頭,Web Sockets的請求頭(url的開頭)

    ws:// - Web Socket的縮寫
    wss:// - 表示加密協(xié)議

  2. 使用 WebSocket 對象的 send() 方法對服務(wù)器發(fā)送數(shù)據(jù)

    webSocket.send (“data”);

    send() 方法只能發(fā)送文本數(shù)據(jù)。,使用JSON對象把任何JavaScript,對象轉(zhuǎn)換稱文本數(shù)據(jù)后進(jìn)行發(fā)送。

  3. 通過WebSocket對象的close() 方法來關(guān)閉socket,切斷通信連接:

    webSocket.close( ) ;

  4. Web Socket事件

    1)通過獲取 onmessage事件來接收服務(wù)器傳來的數(shù)據(jù):

    webSocket.onmessage = function( event ){
    
        var data = event.data ;
    }
    

    2)通過獲取 onopen 事件來監(jiān)聽 socket 的打開事件:

    webSocket.onopen = function( event ){
    
    }
    

    3)通過獲取onclose事件來監(jiān)聽socket 的關(guān)閉事件:

    webSocket.onclose = function( event ){
        
    }
    

    4)通過onerror事件,監(jiān)聽客戶端與服務(wù)器端連接出錯(cuò)

    webSocket.onerror = function( event ){
        
    }
    
  5. 通過讀取 readyState 的屬性值來獲取 WebSocket 對象的狀態(tài)。

    CONNECTING(數(shù)字值為0),表示正在連接。
    OPEN(數(shù)字值為1),表示已建立連接。
    CLOSING(數(shù)字值為2),表示正在關(guān)閉連接。
    CLOSED(數(shù)字值為2),表示已關(guān)閉連接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Web存儲API 對于任何程序來說,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲是必備功能之一,并且在需要的時(shí)候能夠提供數(shù)據(jù)。但在過去的Web...
    云音流閱讀 1,077評論 0 1
  • web存儲API總覽 對于任何程序來說,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲是必備功能之一,并且在需要的時(shí)候能夠提供數(shù)據(jù)。但在過去的W...
    Alone灬旅途閱讀 969評論 0 1
  • web存儲API 對于任何程序來說,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲是必備功能之一,并且在需要的時(shí)候能夠提供數(shù)據(jù)。但在過去的Web...
    不住海邊也喜歡浪閱讀 549評論 0 0
  • 、Web存儲API 對于任何程序來說,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲是必備功能之一,并且在需要的時(shí)候能夠提供數(shù)據(jù)。但在過去的We...
    冬天不愛洗頭閱讀 714評論 0 2
  • 偶然從朋友圈知道了這樣一個(gè)APP,好奇與最初的寫作之夢驅(qū)使我下載下來,許久都不曾讀書寫字,想要寫上一大段話...
    S蘇她閱讀 310評論 0 0

友情鏈接更多精彩內(nèi)容