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

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); 
};


转载: http://www.cnblogs.com/AndySong/archive/2009/05/13/1456176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值