server
最近到了家新公司,終於脫離美工捆饒了,現在一心研究代碼就好了。
項目需要,必須要學習了~學習徒中順便記錄一下,有不對的地方希望高手給指點一下。
什麼是Flash Media Server ?
Flash大家庭裡的一員,以前大概叫Flash Communication Server,傳說中的FCS就是這個?現在該叫FMS了吧...
不見不知道哦,一見真可怕,mm還有這麼cool的東東,自從見了她,讓我做些小東東的興趣全沒了,一心想研究這個
這東東能做什嗎?
flash聊天室啊,線上視頻會議啊啊, 網路遊戲?
不管怎樣先安個試試吧
先到這裡下載免費的開發人員版本吧
http://www.macromedia.com/software/flashmediaserver/
然後安裝,安裝時記得使用者名稱和密碼不要瞎填自己要記住,不然好象就要重裝嘍。。
偶裝到了c盤,找到目錄
C:\Program Files\Macromedia\Flash Media Server 2
先要開啟伺服器哦
開始===程式===Macromedia===Flash Media Server 2
有兩個start****,都要開啟,關時候兩個都要關,如果你怕麻煩直接找tool檔案夾裡的批次檔StartServerService.bat吧,他會幫你搞定地,想關就找StopServerService.bat。~
管理伺服器~
開啟後就要管理了哦,點開fms2_console.swf,別看他只是個swf,後台管理就靠他了,輸入你安裝時候的密碼和使用者,伺服器位址寫 localhost 就好
看到了吧,熟悉熟悉他吧
applications檔案夾
你可以在裡邊建一個檔案夾例如叫 FirstApp,以後所有此專案服務器端的flv檔案啊,共用檔案啊都要放在這裡邊
conf檔案夾
還有重要的是conf檔案夾了,裡邊是一些伺服器端的設定檔,以後可能會用,先不用動。。。。
今天到這吧.。。等待下集~8
有一種協議叫rtmp
用戶端和伺服器端通訊是使用協議rtmp的
現在在伺服器端applications檔案夾(當然偶的用戶端和伺服器端是一台機器了)裡建個test1檔案夾,你的地址就為
rtmp:/test1 或者 rtmp://localhost/test1
注意兩個地址中的 "/ "符號
開啟flash
與伺服器通訊首先要建個NetConnection()
var nc = new NetConnection();
串連
nc.connect("rtmp://localhost/test1");
怎麼知道連沒連上呢?順利串連伺服器後會觸發一個onStatus事件
nc.onStatus = function(info) {
//trace(info)
//trace(info.code)
for (i in info) {
trace(i+": "+info);
}
};
完整代碼:
var nc = new NetConnection();
nc.onStatus = function(info) {
trace(info.code);
if (info.code == "NetConnection.Connect.Success") {
trace("接通");
}
};
nc.connect("rtmp://localhost/test1");
注意:預設情況下伺服器是允許你串連的,但只是預設,如果伺服器拒絕你串連的話,上述代碼就不好用了。怎麼回事?我們看看串連的過程吧
串連過程
每當用戶端試圖串連伺服器,一個NetConnection.connect(),伺服器將會調用application.onConnect 來評鑑是不是允許用戶端串連,onConnect()方法返回null 或不返回則將進入未決狀態,直到onConnect方法中返回true或執行acceptConnection(client)則允許,返回false或執行rejectConnection(client)則拒絕,如圖
伺服器檔案是以.asc形式存在的,可以在test1檔案夾裡建一個main.asc
application.onConnect=function(client){
//this.rejectConnection(client);
//this.acceptConnection(client)
//return true
return false
}
這樣就拒絕串連了
共用的概念就是讓每個連結到伺服器的swf都能即時的得到共用的資料。
一個人更改了這些資料,其他人都會看得到。例如聊天室裡的發言。
共用對象
共用對象,說英文大概你比較熟ha~ SharedObject, 恩flash中有兩種sharedObject,local sharedobject (LSO) 和 remote sharedobject (RSO),也就是本地共用和遠程共用,偶們討論遠端,不過之前你最好先去瞭解瞭解本地的,對你有好處...
RSO在伺服器端是以檔案形式儲存的,副檔名是.fso,為什麼不是.rso?....我也想問呢- -b
代碼
初始化RSO需要先與伺服器建立一個串連,續上節 ,我們先與伺服器建立一個串連
//初始化遠程共用要利用nc通道
var myNC = new NetConnection();
myNC.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
//成功則利用此nc初始化rso
initRSO(this);
}
};
跟上一節代碼一樣,只是串連成功後多了一個initRSO()函數,看不懂的回去上一節看看
http://www.nshen.net/blog/article.asp?id=394
下邊是initRSO了,跟串連結構差不多
function initRSO(NC) {
//在伺服器上建立myRSO.fso檔案,第2個參數指定nc通道,第3個指定檔案在伺服器上持久保留
my_rso = SharedObject.getRemote("myRSO", NC.uri, true);
my_rso.onSync = function(list) {
//list 是一個對象數組 ,類似這種[{name:"x",code:"success"},{name:"y",code:"success"}]
//初始成功
};
my_rso.connect(NC); //串連
}
瞭解了吧,下邊看一個完整的例子
畫一個mc起名叫mc,在第一幀上寫代碼,
//初始化遠程共用要利用nc通道
var myNC = new NetConnection();
myNC.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
//成功則利用此nc初始化rso
initRSO(this);
}
};
myNC.connect("rtmp://localhost/test1");
function initRSO(NC) {
my_rso = SharedObject.getRemote("myRSO", NC.uri, true);
my_rso.onSync = function() {
mc._x=this.data.x
mc._y=this.data.y
};
my_rso.connect(NC);
}
onMouseDown = function () {
my_rso.data.x = _root._xmouse
my_rso.data.y = _root._ymouse
};
然後發布設定中設定只允許網路,發布看看現在你可以開多個播放器視窗,點其中一個,看看其他的視窗變不變,點此下載
(http://www.nshen.net/blog/attachments/200601/11_145320_test3.fla)
串連流程
完。
再寫一個,不知道這樣能不能做網遊~
mync = new NetConnection();
mync.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
initRSO();
}
if (info.code == "NetConnection.Connect.Closed") {
trace("關閉");
}
};
function initRSO() {
my_RSO = SharedObject.getRemote("myRSO", mync.uri, true);
trace(my_RSO);
my_RSO.onSync = function() {
mc._x = this.data.hero.x;
};
my_RSO.connect(mync);
}
mync.connect("rtmp:/my_app/test1");
//mync.connect("rtmp://localhost:443/my_app/aaa")
mc.onEnterFrame = function() {
my_RSO.data.hero.x = this._x;
if (Key.isDown(Key.LEFT)) {
this._x -= 5;
}
if (Key.isDown(Key.RIGHT)) {
this._x += 5;
}
};