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,用于在...
wince下socket编程的例子,包括server端和client端。
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 端的...
在本实例中,我们将深入探讨如何使用JavaFX结合Socket编程实现一个多线程的通信程序,包括Server端和Client端。 首先,让我们了解Socket编程的基本概念。Socket是网络通信中的一个端点,它允许两个远程系统通过网络...
本项目“基于网络的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...
fdbus实现demo (包括client端和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)接口。...
Microsoft sql server 2008 Native Client (SQL Server Native Client) 是一个同时包含 SQL OLE DB 访问接口和 SQL ODBC 驱动程序的动态链接库 (DLL)。它对使用本机代码 API(ODBC、OLE DB 和 ADO)连接 Microsoft ...
本篇将详细介绍基于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 ...