天天看點

Flash/Flex學習筆記(10):FMS 3.5之Hello World!

Adobe的FMS真的是一個倍兒牛叉的技術!(至少Silverlight在"實時廣播"方面目前還沒有任何能超越FMS的迹象)

曾經盛極一時的tudou,ku6,第一視訊...等一大堆視訊分享類網站,幾乎都使用的是Adobe的FMS技術.

今天先來做一個最簡單的Hello World(例子出自FMS的官方文檔)

1.先建立一個FMS應用HelloWorld

進入FMS的預設安裝目錄: C:\Program Files\Adobe\Flash Media Server 3.5\applications

在這下面建立一個HelloWorld目錄即可

2.打開Flash Cs4,建立一個 Flash檔案(ActionScript3.0),儲存為"HelloWorld.fla"

拖二個按鈕到舞台上,命名為btnConn,btnDisConn;對應的label文本為:"連接配接到FMS","斷開與FMS的連接配接"

再拖一個Label到舞台上,命名為lblResult,用來顯示操作結果

在第一幀上寫入以下代碼:

import flash.net.NetConnection;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;

var nc:NetConnection;

//注冊事件
btnConn.addEventListener(MouseEvent.CLICK,btnConnClick);
btnDisConn.addEventListener(MouseEvent.CLICK,btnDisConnClick);

function btnConnClick(e:MouseEvent) {
  if (nc==null) {
    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS,connHandler);//每當連接配接狀态有變化時,會自動調用 connHandler
    nc.connect("rtmp://localhost/HelloWorld");
    lblResult.text="正在連接配接FMS...";
  }

}

function btnDisConnClick(e:MouseEvent) {
  if (nc!=null) {
    nc.close();
    nc=null;    
  }
}


function connHandler(e:NetStatusEvent) {
  trace(e.info.code);
  switch (e.info.code) {
    case "NetConnection.Connect.Closed" :
      lblResult.text="成功關閉連接配接";
      break;
    case "NetConnection.Connect.Failed" :
      lblResult.text="連接配接嘗試失敗";
      break;
    case "NetConnection.Connect.Success" :
      lblResult.text="連接配接嘗試成功";
      var resp:Responder = new Responder(onReply);
      nc.call("serverHelloMsg", resp, "Hi FMS!");//調用服務端的serverHelloMsg的方法
      break;
    case "NetConnection.Connect.Rejected" :
      lblResult.text="連接配接嘗試沒有通路應用程式的權限";
      break;
    default :
      lblResult.text=e.info.code;
      break;
  }
}

function onReply(e:Object){
  trace("服務端傳回内容:" + e);
  lblResult.text = e.toString();

}      

 上面示範了如何"連接配接到伺服器"、"斷開連接配接"、"調用服務端的方法",先不要急着運作,因為我們服務端的serverHelloMsg方法還沒寫呢

3.建立FMS服務端代碼

定位到C:\Program Files\Adobe\Flash Media Server 3.5\applications\HelloWorld 建立一個main.asc的文本檔案,寫入以下代碼

application.onConnect = function(client){  
  client.serverHelloMsg = function(helloStr){ 
    trace(helloStr);
  return "Hello, " + helloStr + "!";  
  }  
  application.acceptConnection(client);  
}      

 服務端有二個特殊對象application,client;用來生成“應用執行個體”以及“對用戶端的引用”,注意服務端的trace(helloStr),我們知道Flash CS4中trace的資訊會顯示在flash輸出視窗中,而服務端沒有輸出視窗,輸出的資訊将會自動儲存到

C:\Program Files\Adobe\Flash Media Server 3.5\logs\_defaultVHost_\HelloWorld\_definst_\application.xx.log

儲存的内容類似下面這樣:

#Version: 1.0

#Start-Date: 2010-03-14 13:38:08

#Software: Adobe Flash Media Server 3.5.1 r516

#Date: 2010-03-14

#Fields: date time x-pid x-status x-ctx x-comment

2010-03-14 13:38:05 8152 (s)2641173 Hi FMS! -

好了,回到Flash Cs4中,按下Ctrl + Enter可以運作了

作者:​​菩提樹下的楊過​​