Fms3中client端与server端交互方式汇总
系列文章导航
- Flex,Fms3相关文章索引
- Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
- Fms3和Flex打造在线视频录制和回放
- Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
- Fms3中client端与server端交互方式汇总
- 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))
- 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)
- 开源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
Fms3中client端与server端交互方式汇总的更多相关文章
- 多个client与一个server端通信的问题
多个client与一个server端通信的问题 上篇博文主要是讲的关于client与server端的通信问题.在上篇博文中当我们仅仅有一个client訪问我们的server时是能够正常执行的,可是当我 ...
- 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)
1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...
- Java Socket 连接 Client端 和 Server端
Client端: import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;i ...
- oracle client 低于 oracle server 端,导致报错ORA-01882
https://forums.toadworld.com/t/ora-01882-when-i-want-to-view-records-con-dba-scheduler-jobs-toad-10- ...
- 在socket的server端处理client端发来的数据
一.楔子 最近做了一个需求遇到一个坑,归结成一个小问题,其实就是在socket的server端处理client端发来的数据的问题,现将这个问题总结一下,本文将数据在server端以字典的形式存储. 另 ...
- HBase 协处理器编程详解第一部分:Server 端代码编写
Hbase 协处理器 Coprocessor 简介 HBase 是一款基于 Hadoop 的 key-value 数据库,它提供了对 HDFS 上数据的高效随机读写服务,完美地填补了 Hadoop M ...
- Eureka系列(二) 服务注册Server端具体实现
服务注册 Server端流程 我们先看下面这张图片,这张图片简单描述了下我们EurekaClient 在调用EurekaServer 提供的服务注册Http接口,Server端实现接口执行的大致流 ...
- zabbix server端自动发现和zabbix agent端自动注册
一.zabbix自动发现 利用zabbix的discovery功能可以实现自动批量添加主机的功能. Zabbix自动发现实现自定义主机名: 通过自动发现添加的客户端主机的Host name 是以IP地 ...
- Android实战简易教程-第六十六枪(server端搭建和server端Json数据交互)
学习Android有一段时间了.对server端有非常深的好奇,决定对server端的实现进行一些研究,这里实现了一个简单的小样例,用于获取server端的json数据,样例非常easy,适合刚開始学 ...
随机推荐
- php学习十一:组合
我们在类当中我往往会用到一些对象,此时的继承就无法满足我们的需求,这个时候我们需要用到组合.继承如果是is..a的关系,那么组合就是has...a的关系,直接在本类里面声明即可,不过声明的是一个对象 ...
- UIImageView 和 UIWebView 小结
本文转载至:http://www.cnblogs.com/huangdongcheng/archive/2011/11/21.html 1.UIImageView的讲解 (1)初始化 UIImageV ...
- cocos2dx游戏--欢欢英雄传说--添加攻击按钮
接下来添加攻击按钮用于执行攻击动作.同时修复了上一版移动时的bug.修复后的Player::walkTo()函数: void Player::walkTo(Vec2 dest) { if (_seq) ...
- poj_2286 IDA*
题目大意 给定一个由数字组成的#字型网格,和一定的移动规则,问最少需要多少次移动才能达到要求的结果. 题目分析 要求最少需要几步到达结果,可以考虑广度优先搜索算法,或者迭代加深深度优先搜索(IDA*) ...
- 【linux】Crontab 定时任务 使用实例
1 使用putty 登录linux 服务器 2 输入以下命令.查看已有的定时任务 crontab -l 3 输入 以下命令,进入定时任务文件 crontab -e 4 键盘 选择 i 键 进行输 ...
- Intellij debug模式使用
1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断点 3.使用postman发送http请求 4.请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5.按F8 在 ...
- linux如何设置用户权限
linux与用户权限设置: 1.添加用户 首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy //修改密码 ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- oracle的with as用法
转自:https://www.cnblogs.com/linjiqin/archive/2013/06/24/3152667.html with as语法–针对一个别名with tmp as (sel ...
- nginx负载均衡模块
1.upstream 模块 upstream backend { server backend1.example.com weight=5 max_fails=10 fail_timeout=10s; ...