mozilla
您的搜尋結果

    TCP Socket

    非標準

    This API is available on Firefox OS for privileged or certified applications only.

    摘要

    TCPSocket API 可開啟並使用 TCP 連線,亦可讓 Apps 開發者基於 TCP 架構,建構相關通訊協定 (如 IMAP、IRC、POP、HTTP等);甚至建立自己所需的協定以滿足特殊需求。

    概述

    透過 navigator.mozTCPSocket 屬性 (本身為 TCPSocket 物件) 即可存取此 API。

    開啟 Socket

    TCPSocket.open() 函式即可開啟 Socket。該函式共有 3 組參數:

    1. 以 1 組字串代表所要連線的伺服器主機名稱 (亦可為該伺服器的原始 IP 位址)。
    2. 以 1 組數字代表 Socket 所要使用的 TCP 通訊埠 (某些協定擁有標準埠,如 HTTP 為 80、SSL 為 447、SMTP 為 25 等。若為 1024 以上的通訊埠數字,則不會用於任何特定的通訊協定,也就是說可用於任何用途)。
    3. 最後是 1 組選填的物件,內含最多 2 個選項。
      i.) 名為 useSSL 的 Boolean 值,代表 Socket 必須使用 SSL,預設值為 false。
      ii.) 名為 binaryType 的字串,可指定 Apps 透過 data 事件所取得的資料型態,可為 stringarraybuffer 值。預設值為 string
    var socket = navigator.mozTCPSocket.open('localhost', 80);

    注意:僅限 Certified Apps 可使用 1024 以下的通訊埠。

    傳送資料

    TCPSocket.send() 函式將透過 1 組字串,或 1 組 Uint8Array 物件而傳送資料。另請注意,由於 TCP Socket 僅處理二進制資料,因此使用 Uint8Array 可達較高的安全性。

    對 TCP 通訊協定而言,單次傳輸量最好以 64kb 為上限而能達到最佳效果。只要緩衝的資料不到 64kb,送至 send 函式的呼叫即會回傳 true。一旦緩衝區滿載,則函式隨即回傳 false,進而要求該 App 暫停並清空緩衝區。每次只要清空緩衝區就會發出 drain 事件,讓該 App 針對此事件再度開始傳送資料。

    透過 TCPSocket.bufferedAmount 屬性,即可得知目前已緩衝的實際資料量。

    function getData() {
      var data;
    
      // do stuff that will retrieve data
    
      return data;
    }
    
    function pushData() {
      var data;
    
      do {
        data = getData();
      } while (data != null && socket.send(data));
    }
    
    // Each time the buffer is flushed
    // we try to send data again.
    socket.ondrain = pushData;
    
    // Start sending data.
    pushData();
    

    取得資料

    只要 Socket 獲得主機所傳來的資料,就會發出 data 事件。App 可透過此事件而存取來自於 Socket 的資料。當 Socket 為開啟狀態時,則資料型態將根據已設定的選項而有所不同 (可參閱前述的第三種參數)。

    socket.ondata = function (event) {
      if (typeof event.data === 'string') {
        console.log('Get a string: ' + event.data);
      } else {
        console.log('Get a Uint8Array');
      }
    }

    在送出所需的 data 事件之後,有時也必須暫停後續資料流入。此時呼叫 TCPSocket.suspend() 函式,即可暫停讀取後續資料並停止發送 data。若要再次開始讀取資料並發送事件,則可呼叫 TCPSocket.resume() 函式。

    關閉 Socket

    TCPSocket.close() 可關閉 Socket。

    標準

    尚未有任何規格。若要進一步了解此 API,可至 W3C 的 Raw Sockets 提案之下,參閱 System Applications Working Group 的相關討論。

    另可參閱

    Document Tags and Contributors

    Contributors to this page: MashKao
    最近更新: MashKao,