Luar's Flash Playground:Broadcast、Feedback和Private Call
Broadcast、Feedback和Private Call (25-05-2003)
利用FlashCom製作任何多人連線的應用時,明白Broadcast、Feedback、Private Call三種概念的分別,便可以清楚知道何時需要應用那一種情況,與及應該如何編程。

Broadcast
Broadcast是向所有人廣播,假設Client邊有5個人連線,5個人都可以收到這個訊息,這個訊息可以是由Server向5個人發出;或是是其中一個人,通過Server向5個人發出。要做到廣播,主要利用Server邊的SharedObject.send()。

例如:
Client邊發送:
NetConnection.call("msgFromClient", null, msg);

Server邊:
NetConnection.msgFromClient = function(msg) {
    application.SharedObject.send("msgFromSrvr", msg);
};
Client邊接收:
SharedObject.msgFromSrvr = function(msg) {...};


Feedback
Feedback指Server向自己發出訊息,例如自已利用NetConnection.call()呼叫Server邊的Function,Server邊又用NetConnection.call()呼叫Client邊的Function作出回應,留意Server邊這個NetConnection.call()只可以Client自已收到,別的Client是收不到。

例如:
Client邊發送:
NetConnection.call("msgFromClient", null, msg);

Server邊:
NetConnection.msgFromClient = function(msg){
    Client.call("msgFromSrvr", false, msg);
};
Client邊接收:
NetConnection.msgFromSrvr = function(msg) {...};


Private Call
應用Chat Room的情形,就是私下交談,Client邊有5個人(A-E),A有些說話只想對E說,別的人不會收到,這就是Private Call的概念。FlashCom沒有直接ActionScript可以做到,利用一個較迂迴方法去做。首先Server邊有一個Object叫Client,當每一個Client邊連線成功後,Server邊的application下便會產生一個Client Instance,例如有5個人,就有5個Client Instances,分別是application.clients[0]至application.clients[4],只要利用Prototype對Client Object擴充一個新Method,Method中有一個For Loop,檢查Client Instance的ID(假設每個Client邊連線都有一個Unique ID),當ID跟接收者的ID相同時,便利用application.clients[i].call()去Call接收者的Function。

例如:
Client邊發出:
NetConnection.call("msgFromClient", null, id, msg);

Server邊:
Client.prototype.msgFromClient = function(id, msg) {
    for (var i = 0;i<application.clients.length;i++){
        if (application.clients[i].name == id) {
            application.clients[i].call("msgFromSrvr", null, msg);
        }
    }
};
Client邊接收:
NetConnection.msgFromSrvr = function(msg) {...};
本文章由發表。
意見
"; print "沒有意見。
 "; } ?>
  • 在flash中應該怎麼寫?

    Monty於06-06-2003發表

  • 我覺得Feedback中的server描述有錯誤的地方。Netconnection.call()是調用一個 Flashcom或者應用服務器上的方法.要呼叫client端就要改為:
    client.call("msgFromSrvr", false, msg);完整的code應為:
    client.msgFromClient = function(msg){
    client.call("msgFromSrvr", false, msg);
    };

    不知luar同意否。

    由guly於07-11-2003發表

  • 嗯,改了。

    luar於07-11-2003發表

  • 我在server端用Netconnection定義函數,在client端找不到呀
    Client邊發送:
    NetConnection.call("msgFromClient", null, msg);
    Server這邊,用NetConnection.msgFromClient = function(msg){
    Client.call("msgFromSrvr", false, msg);
    };
    調試的時候會說method not found,但是把server端改為Client.prototype.msgFromClient = function (msg) {Client.call("msgFromSrvr", false, msg);} 可以找到並執行

    由kxw9c於21-11-2003發表

  • 為什麼我按照luar在私聊弁鄐W的做法做了後,在com app 和04里都會報錯,無法連接,或者 client 不存在,或者其他錯誤
    還請luar指點!

    由versace於16-07-2004發表

同組文章