Fms3中client端与server端交互方式汇总

系列文章导航

  1. Flex,Fms3相关文章索引
  2. Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
  3. Fms3和Flex打造在线视频录制和回放
  4. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
  5. Fms3中client端与server端交互方式汇总
  6. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))
  7. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)
  8. 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))

fms3中server端代码是写在asc文件中,客户端是broadcastMsg.swf
2者交互方式我总结如下:

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 的用法一样。他调用一个远程服务器上的方法。我就没贴代码

5.代码下载
http://files.cnblogs.com/aierong/TestCode1.rar

时间: 2024-10-27 04:02:00

Fms3中client端与server端交互方式汇总的相关文章

Android实战简易教程-第六十六枪(server端搭建和server端Json数据交互)

学习Android有一段时间了.对server端有非常深的好奇,决定对server端的实现进行一些研究,这里实现了一个简单的小样例,用于获取server端的json数据,样例非常easy,适合刚開始学习的人学习使用. server端 首先我们搭建server端,server端使用struct2架构,对该架构不熟悉的人能够花一点时间看看慕课网上的相关视频,这里用myeclipse实现server端. 新建一个webproject.这里要引入struct2相关,方法是:点击新建的webproject

JVM的Client模式与Server模式

Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件:因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中

微服务学习三:springboot与springcloud集成之Eurake的使用(server端,client端)

这个多亏了网站上的一个大神的博客: http://blog.csdn.net/forezp/article/details/70148833 强烈推荐学习: 1.springcloud是什么,这个大家百度吧,我一会也说不明白,但是比dubbo更强大,包含了dubbo的内容,也包含了比dubbo更多的内容. 2.什么是Eurake?关于这个我觉得如果大家知道zookeeper就明白了Eurake的优势. springcloud集成了Eurake,所以对于服务的治理注册更方便简洁了,而且不需要安装,

怎么在yar的server端任何地方获得client请求调用的方法

先说下碰到的问题吧:上周调查个问题发现,在rpc server端解析client上传上来的post数据,解包,找函数,执行都在Yar_Server的函数handle中执行了.没有向后面的系统或者服务传递上下文的方法.为了调查问题我们只能在函数调用里面记录哪个方法被调用了. 那么是不是可以在Yar_Server里面试着增加个静态变量保存内容,限于自身能力,现只增加了一个方法,返回了调用的method,用于server端向后面传递. 如下, 小改之后就可以通过 Yar_Server::getCall

UDP也需要现有Server端,然后再有Client端

UDP编程: DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流. DatagramPacket(信件):数据包,是UDP下进行传输数据的单位,数据存放在字节数组中. UDP也需要现有Server端,然后再有Client端. 两端都是DatagramPacket(相当于电话的概念),需要NEW两个DatagramPacket. InetAddress:网址 这种信息传输方式相当于传真,信息打包,在接受端准备纸. 模式: 发送端:S

搜集的一些RTMP项目,有Server端也有Client端

查询一些RTMP的协议封装时找到了一些RTMP开源项目,在这里列举一下,以后有时间或是有兴趣可以参考一下: just very few of them. Red5 only contains a server-implementation (in java). The python project rtmpy aims to be a freesoftware implementation of an RTMP library, whilst Tape intends to be a fulls

【Socket编程】使用C++实现Server端和Client端

我是在Visual Stdio 2013上建立了两个工程,分别编译运行下面的两个main文件,然后进行测试的 服务端:Server.cpp #include <WINSOCK2.H> #include <iostream> using std::cout; using std::cin; using std::endl; #include <string> using std::string; #pragma comment(lib,"ws2_32.lib&q

应用java多线程实现server端与多client之间的通信

应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和server端链接 3.server端接受client请求,创建socekt与该client建立专线链接 4.建立链接的socket在一个单独的线程上对话 5.server继续等待新的链接 server端Server.java package test.concurrent.socket; import

Netty Client和Server端实现

本文基于Nett4.0.26.Final版本浅析Client与Server端通讯,先看服务器端: public class Server { public static void run(int port) { /**Netty创建ServerSocketChannel,默认SelectionKey.OP_ACCEPT*/ EventLoopGroup boss = new NioEventLoopGroup(); EventLoopGroup worker = new NioEventLoop