Server端和Client端的SharedObject互相呼叫对方的方法
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/1173
近来再做FMS上的东西, 一直使用NetConnection.call, application.client[index].call
来互相呼叫对方的方法,今天查看文档的时候看到SharedObject也是可以互相呼叫方法的。
把我的伪代码记录如下 :
// ----------------------- NetConnection -------------------------
var HOST:String = "127.0.0.1";
var APP:String = "so";
var nc:NetConnection = new NetConnection( );
nc.onStatus = function( info:Object ):Void
{
//for (var p in info) trace(p+"--->"+info[p]);
if (info.code == "NetConnection.Connect.Success")
{
createRemoteSO( );
}
};
nc.connect("rtmp://"+HOST+"/"+APP, [p1, p2, p3 ....]); // 连接到服务器
/*
服务器端的application.onConnect会接收Client传递过来的[p1, p2, p3 ....]
比如说
Clinet :
nc.connect("rtmp://"+HOST+"/"+APP, usernameVal, passwordVal); // 连接到服务器
Server :
application.onConnect = function(clientObj, username, password)
{
// client是一个Object, 包含了当前连接到FMS的Client的全部信息,
// 可以通过 for(var prop:String in clientObj) trace(prop+"---->"+clientObj[prop]);
// 来查看到底clientObj内有哪些信息 :)
// 检查username, password是否合法, 这两个参数就是Client通过NetConnection.connect传递过来的
this.acceptConnection( clientObj ); // 接受连接
// 接受连接也可以用 return true;
// 当然也可以拒绝请求, 请查看SSAS上的application说明.
}
*/
// ----------------------- SharedObject -------------------------
var so:SharedObject;
function createRemoteSO( Void ):Void
{
/*
建立远程序共享对象
SharedObject.getRemote(objectName, URI [, persistence])
objectName so名
URI 要将SO建立到那条通道上.
persistence 是否持久化, true则表示在服务器硬盘上生成该文件, 当FMS当掉该文件也是存在的;
false表示仅在内存中维护该so文件, 当appStop该文件会消失.
该参数可以省略, 省略或null则默认为false.
*/
so = SharedObject.getRemote("so", nc.uri, true);
if( so.connect( nc ) )
{
so.getName = function( str:String ):Void
{
// 通过SharedObject定义客户端方法, 服务器可以呼叫该方法.
trace(str+"服务器调用getName成功!");
}
//so.onSync
//so.onFirstSync
so.data.name = "蹩脚馒头";
so.data.sex = "男";
}
}
/**
* 服务器伪代码
*/
application.allowDebug = true;
application.onAppStart = function()
{
// TODO
}
application.onConnect = function( clientObj, username, password )
{
this.acceptConnection( clientObj );
/* 取Client在服务器端建立的so文件, 注意名字是一样的都是"so"
如果在服务器端你写"soA", 那么会创建一个新的SO文件(名字是soA),
注意查看SSAS文档对SharedObject的描述.
*/
var so = SharedObject.get("so", true);
// SSAS对 getPropertyNames 的描述是返回一个Array, 但是我测试出来是一个Object,
// 应该是SSAS的问题, 我发现FMS的文档上有很多地方有问题.
var allProp = so.getPropertyNames( ); // 获得so上的所有属性
/*
在服务器端对so加减属性不是通过 so.data.key = value这样的形式了
是通过
so.setProperty(key, value);
so.getProperty(key, value);
还有
我们都知道在Client端,如果你修改了so上的某个属性值, 就会广播这个事件出去,所有连接到
同一个APP的Client都会接收到该广播, onSync会被触发
但是在服务器端修改了so上的值是不会广播的, 因为服务器端认为修改肯定是成功的,不需要广播
有兴趣了解这个知识点的可以查看
ZRong的Blog << SharedObject.onSync的研究 >>
http://www.zengrong.net/?p=29#comment-11982
*/
trace("type="+(typeof allProp));
for(var i in allProp)
trace(i+"----->**>>"+allProp[i]);
so.send("getName", "HI"); // 通过服务器端的SO呼叫客户端的方法, 那么在服务器端定义方法, 在客户端呼叫应该也是可行的。
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/1173
分享到:
相关推荐
VNC(Virtual Network Computing)是一种基于远程帧缓冲协议(RFB)的远程桌面技术,它允许用户通过网络从一台计算机(client端)控制另一台计算机(server端)。VNC技术的核心在于其轻量级和跨平台性,可以在多种...
通过对Server和Client两端的模拟,用户可以全面测试应用的各个方面,提高系统的稳定性和兼容性。在具体使用Modscan32等模拟器时,务必熟悉Modbus协议的规范,理解每个功能码的含义和用途,以便更好地利用这款工具...
在这个例子中,我们关注的是一个简单的Server端和Client端的实现,这类似于流行的即时通讯软件QQ的数据通信功能。 首先,让我们深入了解Winsocket的基本概念。Winsock是Windows Socket的简称,它是一个API,用于在...
源码中包含了Server端和Client端,通过搭建Server端和Client端,实现了Server端和Client端双向通讯,可以直接将该框架运用于自己项目,完成两个应用之间通讯。相关接口根据自己使用情景适当调整即可。
wince下socket编程的例子,包括server端和client端。
在本实例中,我们将深入探讨如何使用JavaFX结合Socket编程实现一个多线程的通信程序,包括Server端和Client端。 首先,让我们了解Socket编程的基本概念。Socket是网络通信中的一个端点,它允许两个远程系统通过网络...
fdbus实现demo (包括client端和server端)
Prosys OPC UA Simulation是针对这一标准的模拟工具,它包含了服务器端(Server)、客户端(Client)以及相关的说明文档,帮助用户在开发、测试和调试OPC UA应用程序时进行仿真实验。 1. OPC UA概述: OPC UA是一...
本demo 包含 server端和client端,也是参照前辈的博文。感谢挖井人。 含helloworld.grpc.pb.cc helloworld.pb.cc helloworld.proto helloworld.grpc.pb.h helloworld.pb.h,建议自己重新生成,以免因为环境差异导致...
**三、Server端实现** 1. **初始化**: 在MFC服务器端程序中,首先需要调用AfxSocketInit函数来初始化Winsock。 2. **创建监听Socket**: 使用CSocket类的Create方法创建一个监听Socket,并指定服务类型(通常是SOCK_...
et_create()`函数创建一个 Socket,并使用`socket_connect()`函数连接到 Server 端的指定 IP 地址和端口。Client 端通过`socket_write()`函数发送消息到 Server 端,然后使用`socket_read()`函数接收 Server 端的...
本项目“基于网络的Tcp通讯Server服务器端和Client客户端.zip_client_socket_tcp”旨在演示如何在Windows环境下实现基于TCP的双向通信,通过一个简单的实例来说明Server端和Client端的交互过程。 首先,我们要理解...
SQL Server Native Client是一个集成的驱动程序,提供ODBC(Open Database Connectivity)和OLE DB(Object Linking and Embedding, Database)接口。它不仅支持SQL Server 2012,还向下兼容早期版本,如SQL Server...
Socket分为客户端(Socket Client)和服务器端(Socket Server),它们共同构成了基于TCP/IP协议的通信模型。本篇文章将详细探讨Android环境下如何进行Socket Client端和Socket Server端的数据发送与接收。 1. **...
这个项目包含了Server端和Client端的所有必要组件,旨在简化用户在多应用系统间的登录流程,提高用户体验。下面将详细阐述SSO的基本原理以及这个项目中的关键知识点。 SSO是一种身份验证机制,它允许用户在一个应用...
在"cas server端 和client JMS 验证包"中,我们关注的是CAS服务器端和客户端的交互以及JMS(Java Message Service)在验证过程中的应用。JMS是Java平台中定义的一种标准接口,用于在分布式环境中交换消息,它可以...
该组件支持多种数据访问接口,如ODBC(Open Database Connectivity)和OLE DB(Object Linking and Embedding, Database),允许开发人员在不同的编程环境中与SQL Server进行高效的数据通信。 SQL Server 2008 ...
SQL Server Native Client 10.0 是微软推出的一款专门用于与SQL Server 2008及后续版本交互的客户端库,它集成了ODBC(Open Database Connectivity)和OLE DB(Object Linking and Embedding, Database)接口。...
本篇将详细介绍基于C#语言的Socket通讯框架,该框架已经封装了客户端(Client)和服务器端(Server)的类库,并提供了实例演示和使用手册,方便开发者快速理解和应用。 首先,让我们了解什么是Socket。Socket是操作...
SQL Server Native Client 10.0 是微软为SQL Server 2008和2008 R2设计的一个数据库访问接口,它集成了ODBC(Open Database Connectivity)和OLE DB(Object Linking and Embedding, Database)接口。在SQL Server ...