语录提交--登陆--注册--论坛交流--站长博客

Server端与Client端method触发与data广播概念

[作者:来自网络][日期:2007-12-28][导航:Flash教程 >> Fms2 >> Server端与Client端method触发与data广播概念]
  

在FCS的应用上常会需要让Client与Server间的数据传递与method呼叫,以下几点概念应该可以

避免呼叫method没反应或数据没传到你要的地方等状况发生。

一.Server端method如何被呼叫

Server端上要能让Client所呼叫触发的function,需定义在Server端的Client对象上你可以用

prototype方式去extend原本Client类别的method,让Client类别所产生的instance都拥有该

method。

例:

Client.prototype.newfun=function(){}

你也可以把这function定义在单一Client instance下,

例:

application.onConnect(newClient)=function(){

.....

newClient.newfun=function(){}

}

二.Client端的method如何被呼叫

在Client端上要让Server端可以呼叫的function,一定要定义在Netconnection上。

例:

nc=new NetConnection();

.....

nc.myfun=function(){}

三.send或call这两个method在使用上有何差异?如何使用

call:这method在Client端上可使用的是netconnection对象,在Server端上可使用的是

netconnection与Client物件

1.在Client端利用netconnection.call来触发执行Server端上Client 对象的method。

2.在Server端上利用Client对象.call来触发Client端上netconnection上的method。

3.在Server端上使用netconnection.call时,这时这server的角色就像一个client端一样

,是在触发另一个Server端上Client 物件的method。

send:在Client端上可使用这method的包含SharedObject与netStream

send这个method很有趣,他让你由client端去启动所有同在client端的function,但因为

在触发function时可以带参数过去,这个特性是可以让你利用来做小量数据的广播的,要

广播给所有人接收到的数据,并不一定就要放在SharedObject内,利用其onSync来做同步

,有时用send也是一个很简单的做法,如何定义

1.在netStream或SharedObject上定义好method "myfun"

2.利用netStream.send("myfun")或sharedobject.send("myfun",myvar)可让所有client

上的"myfun"都会被触发

四.几种可能的互动型态范例

1.Client端对Server端传送data或呼叫执行Server端function

应用范例:一个简易聊天室,聊天内容只存在Server端的变量内,不使用SharedObject存放呼

叫Server端的message这method来处理client传上去的msg这对话内容

Client端:

nc.call("message", null, msg);

Server端:

application.onAppstart=function(){

application.chat_content="";

}

application.onConnect=function(newClient){

.......

newClient.message=function(msg){

application.chat_content+=msg;

}

}

2.Client端对所有Client广播data并执行指定Client端function

应用范例:以之前在站上回复过的问题为例,一个clinet要输入一个网址url_txt,要让所有的

client都会开启这网址的网页

Client端:

先定义一个附挂在so上的method

lobby_so.openPage=function(receive_url){

getURL(receive_url);

}

利用send就可让所有client接收到这网址并开启

lobby_so.send("openPage",url_txt);

3.Server传送data给特定Client

应用范例:当有使用者联机上server,当使用者数据验证正确时,接受其联机,一方面要client

去执行指定的function跳到某页或让某mc出现...,同时又要把server端的数据带过去

说明:server只响应正在与server做互动的那个client,如以上范例,server只会去触发请求

联机的该client去执行指定的function,其它client不会有反应

Server端:

application.onConnect=function(newClient,pwd){

if(pwd=="ok"){

application.acceptConnection(newClient);

newClient.call("get_message",null,message);

}else{

application.rejectConnection(newClient,errObj);

}

}

Client端:

........

nc.get_message=function(message){};

4.Server广播data给所有Client

应用范例:当有人断线时,由server端广播所有client,让所有client都能同步更新client名单

说明:以上范例来说,当clinet无预警的断线,只有Server上的application.onDisconnect 这handler

会被触发,也就是说你需要在这handler内写一些程序去广播通知给所有的client。

如何广播?有以下两种做法

1.把数据放在remote SharedObject对象内,只要SO对象内容更动,即自动触发Client端的so.onSync

将在线人员名单写在remote SharedObject对象内,当有人断线,只要把so内该笔数据剔除掉,因为

so内容改变,因此所有Client端的so.onSync 这handler将被触发,即可达到你要更新数据的目的。

Server端

application.onDisconnect=function(newClient){

userlist_so.setProperty(newClient.name,"");

}

注:相对的当server端无预警的断线,client端可由nc.onStatus这handler内由判断info.code来取

得信息

2.当数据不是存在so内时,只是存在server端的一个变量上,可以善加利用application.clients来对

所有client广播。以下会触发所有client端上的client_fun,并把server上的sendvar变量带过去

server端:

application.onDisconnect=function(newClient){

for(var i=0;i<application.clients.length;i++) {

application.clients[i].call("client_fun",null,sendvar);

}

}

Client端:

nc.client_fun=function(myvar){ }

增加一个广播的方法

Server 端传送给有getRemote 同一个ShareObject 的Client 端

Server 端:

application.abc_so = SharedObject.get("abc_so", false);

application.abc_so.send("msgFromSrvr", msg);

Client 端:

abc_so = SharedObject.getRemote("abc_so", abc_nc.uri, false);

abc_so.msgFromSrvr = function(msg) {

showMsg(msg);

};

[文章热度:]


上一页:基于FMS的Flash多人涂鸦白板

下一页:Fms SharedObject实现用户列表

最新话题

网站导航

搜索

网站公告


Copyright 2007 51as.com. Some Rights Reserved.
鄂ICP备07003189号

Powered by: KingCMS 5.0.1.0217