FMS 客戶端帶寬計算、帶寬限制

1. 帶寬計算

FMS內置了帶寬檢測的特性(被稱做"native bandwidth detection"),要進行帶寬檢測,客戶端只要在成功鏈接到服務器以後調用NetConnection.call("checkBandwidth")。
簡單步驟以下:
a. 服務器端容許帶寬檢測:編輯Application.xml文件 <BandwidthDetection enabled="true"> ,該參數默認是開啓的,其實不用專門設,只是須要確認一下是否被關閉了。
b. 實現客戶端代碼以下: php

class NetConnectionClient { 
    public function onBWCheck(... rest):Number { 
        return 0; 
    } 
    public function onBWDone(... rest):void { 
        var p_bw:Number; 
    var bwUnit:String=" Kbps";
    if (rest.length > 0) p_bw = rest[0];
    if (p_bw>1024){
        p_bw=Math.round((p_bw/1024)*1000)/1000;
        bwUnit=" Mbps";
    }
    trace("bandwidth  = " + p_bw + bwUnit); 
    }  
}

必定要注意:兩個方法參數前面帶的3個點,那是FLEX書寫的格式,代表動態參數。html

注:checkBandwidth() 方法屬於服務器上的Client類。
以上onBWCheck()和onBWDone()方法在NetConnection.client中定義。

大體原理以下:客戶端調用nc.call("checkBandwidth", null);以後,服務器端向客戶端發送一批數據,客戶端的onBWCheck()被自動調用,該方法必須返回值(即便是0)用戶向服務器端代表已經收到數據。當服務器端完成帶寬檢測後就會調用onBWDone(),該方法有4個參數,第一個參數是以Kbps爲單位的帶寬值,第2、三個參數未使用,第四個參數是以毫秒爲單位的網絡延遲。服務器

 2. 帶寬限制

a.設置帶寬限制
clientObject.setBandwidthLimit(iServerToClient, iClientToServer)
參數:
iServerToClient,iClientToServer 都是Number類型,單位bps,0表示保持當前設置不變。前者表示服務器端到客戶端的帶寬,後者表示客戶端到服務器端的帶寬。setBandwidthLimit不能設置超過Application.xml中設置的帶寬限制值。
示例:網絡

application.onConnect = function(newClient, serverToClient, clientToServer)
{
    newClient.setBandwidthLimit(serverToClient, clientToServer);
    application.acceptConnection(newClient);
} 

b.獲取帶寬限制
clientObject.getBandwidthLimit(iDirection)
參數: iDirection 一個整數指定鏈接的方向: 0 表示客戶端到服務端,1 表示服務端到客戶端。
返回: 一個整數表示每秒的字節數
示例:app

application.onConnect = function(newClient){
var clientToServer - newClient.getBandwidthLimit(0);
var serverToClient = newClient.getBandwidthLimit(1);
};

參考:spa

Adobe FMS幫助文檔 - Detecting bandwidth 3d

Calculating bandwidth needs for Flash Media Server 3
rest

相關文章
相關標籤/搜索