版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、· 在FCS的应用上常会需要让Client与Server间的数据传递与method呼叫,以下几点概念应该可以 避免呼叫method没反应或数据没传到你要的地方等状况发生。一.Server端method如何被呼叫Server端上能定义在Client对象上的function,用prototype方式去extend原本Client类别的method,让Client类别所产生的instance都拥有该method。例:你也可以把这function定义在单一Client instance下,例:application.onConnect(newClient)=function().newCli
2、ent.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
3、 对象的method。2.在Server端上利用Client对象.call来触发Client端上netconnection上的method。3.在Server端上使用netconnection.call时,这时这server的角色就像一个client端一样,是在触发另一个Server端上Client 物件的method。send:在Client端上可使用SharedObject与netStream包含的methodsend这个method很有趣,他让你由client端去启动所有同在client端的function,但因为在触发function时可以带参数过去,这个特性是可以让你利用来做小量数据
4、的广播的,要广播给所有人接收到的数据,并不一定就要放在SharedObject内(再利用其onSync来做同步),有时用send也是一个简单做法。1.在netStream或SharedObject上定义好method "myfun"sharedobject.send("myfun",myvar)可让所有client上的so内部申明的"myfun"函数被触发四.几种可能的互动型态范例1.Client端对Server端传送data或呼叫执行Server端function应用范例:一个简易聊天室,聊天内容只存在Server端的变量内,不使用
5、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;
6、2.Client端对所有Client广播data,各 client都会执行指定的本地化function应用范例:以之前在站上回复过的问题为例,一个clinet要输入一个网址url_txt,要让所有的client都会开启这网址的网页Client端:先定义一个附挂在so上的methodlobby_so.openPage=function(receive_url) getURL(receive_url);利用send就可让所有client接收到这网址并开启lobby_so.send("openPage",url_txt); 3.Server传送data给特定Client应用范例:
7、当有使用者联机上server,当使用者数据验证正确时,接受其联机,一方面要client去执行指定的function跳到某页或让某mc出现.,同时又要把server端的数据带过去,说明:server只响应正在与server做互动的那个client,如以上范例,server只会去触发请求,联机的该client去执行指定的function,其它client不会有反应Server端: application.onConnect=function(newClient,pwd)if(pwd="ok")application.acceptConnection(newClient);new
8、Client.call("get_message",null,message); elseapplication.rejectConnection(newClient,errObj); Client端:.nc.get_message=function(message); 4.Server广播data给所有Client应用范例:当有人断线时,由server端广播所有client,让所有client都能同步更新client名单说明:以上范例来说,当clinet无预警的断线,只有Server上的application.onDisconnect 这handler会被触发,也就是说你
9、需要在这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(newCli
10、,"");注:相对的当server端无预警的断线,2.当数据不是存在so内时,只是存在server端的一个变量上,可以善加利用application.clients来对所有client广播。以下会触发所有client端上的client_fun,并把server上的sendvar变量带过去server端:application.clientsi.call("client_fun",null,sendvar); Client端:nc.client_fun=function(myvar) 增加一个广播的方法Server 端传送给有getRemote 同一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论