FMS服务器和客户端之间的远程调用实现
2014-08-28 20:03
375 查看
摘自百度文库,但不知道作者是谁。
1、客户端呼叫服务器
服务器端main.asc代码如下:
客户端代码如下:
代码说明:
Responder 类提供了一个对象,该对象在NetConnection.call()
中使用以处理来自与特定操作成功或失败相关的服务器的返回值。
它有2个参数:第1个是成功调用回调的方法,第2个参数是调用失败时回调的方法
call()
方法
public function call(command:String, responder:Responder, ... arguments):void
第1个参数:服务器端方法名
第2个参数:可选对象,用于处理服务器的返回值
第3个参数:传递给服务器端方法的值
本例题:点击按钮后,调用asc文件中的serverFun1方法,并传递参数“va”给它,serverFun1方法处理后方法一个值,要是成功就回调OkFun,并显示“value=va”字符串,要是调用失败(可能会遇到特定于当前操作的网络操作错误或与当前连接状态有关的错误)将回调ErrorFun,并显示错误信息
2.
服务器端呼叫指定的客户端
服务器端main.asc代码如下:
客户端代码如下:
代码说明:
Client.call() 在Flash客户机上异步的执行一个方法,并把值从Flash客户机返回到服务器。
用法 clientObject.call(methodName, [resultObj, [p1, ..., pN]])
第1个参数:客户端的方法名
第2个参数:当发送者期待一个来自客户机的返回值时需要这个参数。如果参数被传递但没有返回值被期待的话,则传递值null。结果对象可以是你定义的任何对象,并且,为了有用起见,这个结果对象应该有两个方法-onResult和onStatus,这些方法会在结果到达时被调用。如果远端方法的调用是成功的,则resultObj.onResult事件会被触发;否则,resultObj.onStatus事件将被触发。
第3个参数:传递给客户端的方法的值
本例题:启动后,连接成功,服务器接收请求,并调用改客户端的asyncServerCall方法(必须公有),asyncServerCall方法处理后返回值,要是处理成功onResult事件就被触发,要是处理失败onStatus事件就被触发。
3.
服务器端呼叫所有的客户端(广播)
服务器端main.asc代码如下:
客户端代码如下:
代码说明:
Application.broadcastMsg():把一条消息广播到所有连接的客户机,给每个客户机广播
这个方法相当于循环遍历Application.clients数组并在每一个独立的客户机上调用Client.call(),但这个方法的效率更高(尤其是当连接的客户机数量很大时)。唯一的不同是当你调用broadcastMsg()时你不能指定一个响应对象,除此以外,两种语法是一样的。
等同于如下:
//遍历客户端列表,分别call他们
for(var i=0;i<application.clients.length;i++) {
application.clients[i].call("showServerMsg",application.clients.length);
}
本例题:一旦有客户机连接fms,就给每个连接的客户机广播,并显示出"已经有n位用户连接
4. 服务器端呼叫服务器端
NetConnection.call
用法:
NetConnection.call(methodName, [resultObj, p1, ..., pN])
调用一个Flash Communication Server
或者其他应用服务器上的命令或方法。用法和客户端的 NetConnection.call
的用法一样。他调用一个远程服务器上的方法。我就没贴代码
1、客户端呼叫服务器
服务器端main.asc代码如下:
Client.prototype.serverFun1 = function(value) { return "value="+value };
客户端代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; private var netConnection:NetConnection; private var responder:Responder; private var appServer:String="rtmp://192.168.0.249/TestCode1"; private function init():void { netConnection = new NetConnection(); netConnection.connect(appServer); netConnection.client=this; } private function onClick(evt:MouseEvent):void { responder = new Responder(OkFun,ErrorFun); netConnection.call("serverFun1",responder,"va"); } private function OkFun(re:String):void { Alert.show(re); } private function ErrorFun(info:Object):void { Alert.show( "error: " + info.description ); Alert.show( "error: " + info.code ); } ]]> </mx:Script> <mx:Button x="43" y="65" label="调用服务器" id="btn" click="onClick(event)"/> </mx:Application>
代码说明:
Responder 类提供了一个对象,该对象在NetConnection.call()
中使用以处理来自与特定操作成功或失败相关的服务器的返回值。
它有2个参数:第1个是成功调用回调的方法,第2个参数是调用失败时回调的方法
call()
方法
public function call(command:String, responder:Responder, ... arguments):void
第1个参数:服务器端方法名
第2个参数:可选对象,用于处理服务器的返回值
第3个参数:传递给服务器端方法的值
本例题:点击按钮后,调用asc文件中的serverFun1方法,并传递参数“va”给它,serverFun1方法处理后方法一个值,要是成功就回调OkFun,并显示“value=va”字符串,要是调用失败(可能会遇到特定于当前操作的网络操作错误或与当前连接状态有关的错误)将回调ErrorFun,并显示错误信息
2.
服务器端呼叫指定的客户端
服务器端main.asc代码如下:
var handlerObject = function() {}; handlerObject.prototype.onResult = function( result ) { trace( result ); }; handlerObject.prototype.onStatus = function( info ) { trace( "error: " + info.description ); trace( "error: " + info.code ); }; application.onConnect = function( client ) { this.acceptConnection( client ); var msg = "Hello client, your IP is: " + client.ip; client.call( "asyncServerCall", new handlerObject, msg ); };
客户端代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; private var netConnection:NetConnection; private var appServer:String="rtmp://192.168.0.249/TestCode1"; private function init():void { netConnection = new NetConnection(); netConnection.connect(appServer); netConnection.client=this; } public function asyncServerCall( msg:String ) : String { Alert.show( msg ); return "I got your message Thanks Server!"; } ]]> </mx:Script> </mx:Application>
代码说明:
Client.call() 在Flash客户机上异步的执行一个方法,并把值从Flash客户机返回到服务器。
用法 clientObject.call(methodName, [resultObj, [p1, ..., pN]])
第1个参数:客户端的方法名
第2个参数:当发送者期待一个来自客户机的返回值时需要这个参数。如果参数被传递但没有返回值被期待的话,则传递值null。结果对象可以是你定义的任何对象,并且,为了有用起见,这个结果对象应该有两个方法-onResult和onStatus,这些方法会在结果到达时被调用。如果远端方法的调用是成功的,则resultObj.onResult事件会被触发;否则,resultObj.onStatus事件将被触发。
第3个参数:传递给客户端的方法的值
本例题:启动后,连接成功,服务器接收请求,并调用改客户端的asyncServerCall方法(必须公有),asyncServerCall方法处理后返回值,要是处理成功onResult事件就被触发,要是处理失败onStatus事件就被触发。
3.
服务器端呼叫所有的客户端(广播)
服务器端main.asc代码如下:
application.onConnect = function(currentClient) { application.acceptConnection(currentClient); application.broadcastMsg("showServerMsg",application.clients.length ); }
客户端代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; private var netConnection:NetConnection; private var appServer:String="rtmp://192.168.0.249/TestCode1"; private function init():void { netConnection = new NetConnection(); netConnection.connect(appServer); netConnection.client=this; } public function showServerMsg( n:Number ) :void { var msg:String ="已经有"+n.toString()+"位用户连接"; Alert.show( msg ); } ]]> </mx:Script> </mx:Application>
代码说明:
Application.broadcastMsg():把一条消息广播到所有连接的客户机,给每个客户机广播
这个方法相当于循环遍历Application.clients数组并在每一个独立的客户机上调用Client.call(),但这个方法的效率更高(尤其是当连接的客户机数量很大时)。唯一的不同是当你调用broadcastMsg()时你不能指定一个响应对象,除此以外,两种语法是一样的。
等同于如下:
//遍历客户端列表,分别call他们
for(var i=0;i<application.clients.length;i++) {
application.clients[i].call("showServerMsg",application.clients.length);
}
本例题:一旦有客户机连接fms,就给每个连接的客户机广播,并显示出"已经有n位用户连接
4. 服务器端呼叫服务器端
NetConnection.call
用法:
NetConnection.call(methodName, [resultObj, p1, ..., pN])
调用一个Flash Communication Server
或者其他应用服务器上的命令或方法。用法和客户端的 NetConnection.call
的用法一样。他调用一个远程服务器上的方法。我就没贴代码
相关文章推荐
- bbossgroups 2.0-RC 通过JGroups来实现集群节点间远程服务调用,或者多服务器之间远程服务调用
- IPC进程间通信 远程调用接口 AIDL 客户端服务器
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- Python调用paramiko模块实现远程管理多台服务器
- 使用HttpURLConnection实现在android客户端和服务器之间传递对象
- android客户端与部署到tomcat的servlet服务器之间实现http通信
- 转载:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- 使用HttpURLConnection实现在android客户端和服务器之间传递对象
- 使用HttpURLConnection实现在android客户端和服务器之间传递对象
- 使用thrift实现了Java服务器和nodejs客户端之间的跨平台通信
- Android客户端与PC服务端之间的SOCKET实现登陆功能(服务器)
- 如何在远程服务器上发布webservice,客户端调用。
- 花生壳实现SVN客户端远程访问某局域网内SVN服务器(内网ip地址映射外网地址)
- 使用Remote Desktop organizer远程桌面管理工具连接服务器不能实现真机与被远程主机之间的文件拖拉复制
- 转载:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- 在Android上实现SSL握手,实现服务器和客户端之间Socket交互
- C#实现不安装Oracle客户端访问远程服务器数据
- C#实现不安装Oracle客户端访问远程服务器数据
- 使用HttpURLConnection实现在android客户端和服务器之间传递对象
- 服务器与客户端之间的远程图片传输