Flex与.NET互操作(十一):基于FluorineFx.Net的及时通信应用(Remote Procedure Call)(二)

简介:
FluorineFx.NET提供了完善的RPC(Remote Procedure Call)功能,无论是通过Flash还是Flex开发的客户端应用(.swf)都可以非常简单方便的采用RPC的方式调用.NET的服务器端方法,.NET的服务器端同样也可以非常方便的呼叫客户端,调用客户端的方法(比如实现系统广播)。

一、客户端的RPC(客户端调用服务器端
       要想实现客户端访问服务器端的方法,首先得对ActionScript中的NetConnection比较熟悉,该类提供了一个示例方法call()专们用来做RPC访问,该方法的定义如下:
public  function call(command:String, responder:Responder,  arguments): void  
 
      比如说我们在开发一个及时应用的时候,所有的客户端都需要同步服务器的系统时间,这个时候我们就可以在服务器端提供一个返回当前系统时间的方法给客户端调用。如下:
// 返回当前系统时间
public   string  GetServerTime()
{
     
return  DateTime.Now.ToString();
}
      
      有了这个方法客户端就可以通过NetConnection的call()方法实行远程调用了,并通过Responder来处理调用的结果,如果所调用的服务器端方法没有返回值,则在调用的时候可以不使用Responder。如下完整的Flex实例代码:
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:Application xmlns:mx = " http://www.adobe.com/2006/mxml "  layout = " absolute "  fontSize = " 12 " >
    
< mx:Script >
        
<! [CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
        
            
private  var nc:NetConnection;
            
private  var responder:Responder  =   new  Responder(onResult,onError);
            
            
private  function connectionServer( event :MouseEvent): void
            {
                nc 
=   new  NetConnection();
                nc.connect(
" rtmp://localhost:1617/RPCDemo " , " abc " , " 123 " );
                nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);
                nc.client 
=   this ;
            }
            
            
private  function onStatusHandler( event :NetStatusEvent): void
            {
                
this .connStatus.text  =   " 连接状态: "   +   event .info.code;
                
if ( event .info.code  ==   " NetConnection.Connect.Success " )
                {
                    trace(
" 连接服务器成功 " );
                }
            }
            
            
/*  调用服务器端方法  */
            
private  function onGetServerTime( event :MouseEvent): void
            {
                nc.call(
" GetServerTime " ,responder);
            }
            
            
/*  处理调用服务器端方法成功时返回的结果  */
            
private  function onResult(result:String): void
            {
                
this .txtResult.text  =   " 方法GetServerTime返回结果 "   +  result;
            }
            
            
/*  处理调用服务器端方法时候时返回的结果  */
            
private  function onError( event :Event): void
            {
                trace(
" 调用服务器端方法出错 " );
            }
        ]]
>
    
</ mx:Script >
    
< mx:Button x = " 30 "  y = " 43 "  label = " 连接服务器 "  click = " connectionServer(event) " />
    
< mx:Label x = " 30 "  y = " 75 "  width = " 296 "  id = " connStatus " />
    
< mx:Button x = " 30 "  y = " 112 "  label = " 调用服务端方法 "  click = " onGetServerTime(event) " />
    
< mx:Label x = " 30 "  y = " 153 "  id = " txtResult "  width = " 296 " />
</ mx:Application >
 
       FluorineFx.Net的RPC就这么简单,客户端调用服务器端的方法,直接通过当前连接的call()方法调用,使用Responder来处理调用的结果。

二、服务器端的RPC(服务器端调用客户端)
      客户端和服务器端的调用是可以双向的,服务器端也同样可以调用客户端的方法。无论是客户端还是服务器端,相互调用始终都是离不开当前的连接对象。如上面客户端是通过当前连接的call()方法实现的调用服务器端方法,那么服务器端调用客户端的方法同样如此,也是通过当前连接对象来处理。
      FluorineFx中用于连接的接口是IConnection,只要客户端成功的连接上了服务器端,那么在服务器端就会保存所有连接到服务器端的连接对象的各种属性。实现调用客户端方法的则是IServiceCapableConnection接口,IServiceCapableConnection接口的定义如下所示:
      如果要想实现服务器端调用客户端的方法,则必须使用此接口来完成,需要将当前连接的接口IConnection强制转化为
IServiceCapableConnection接口,然后调用其invoke()方法来完成服务器端对客户端方法的调用。
 
///   <summary>
///  调用客户端的方法
///   </summary>
///   <param name="connection"></param>
public   void  InvokeClient()
{

    IServiceCapableConnection conn 
=  FluorineContext.Current.Connection  as  IServiceCapableConnection;
    
if  (connection  !=   null )
    {
        
object [] args  =   new   object [] { GetServerTime() };
        conn.Invoke(
" RecServerMessage " , args);
    }
}
 
      在服务器端可以通过FluorineContext.Current.Connection获取到当前客户端的连接对象,然后将其转化为IServiceCapableConnection接口对象,调用其Invoke()方法便可实现调用客户端的方法。
      这里需要注意一点就是,提供给服务器端调用的客户端方法必须是公共方法(public修饰的方法),否则服务器端会报"Not found method:方法名"的异常。如下代码块:
/* *
 * 接收服务器端的调用方法
 * 
*/
public  function RecServerMessage(message:Object): void
{
    Alert.show(message.toString());
}
 
      FluorineFx.Net所提供的上面这两种功能是非常实用的,特别是在开发及时应用的时候,客户端RPC可以方便是实现将客户端是数据请求到服务器端进行处理,比如开发网络游戏中,游戏客户端的不同数据随时都在改变,那么我们就可以使用客户端RPC来实现这一需求。服务器端RPC同样可以应用于此,游戏中的数据变化了通过客户端RPC请求到服务器端,服务器端进行相与的业务计算和处理之后将客户端需要的数据通过服务器端RPC返回到当前请求的客户端。
 
      或许有的朋友会想或是问到,如果我要开发一个聊天室,要实现系统广播消息是不是可以使用这种方式来实现。答案是肯定的,系统要广播消息,可以从服务器端获取到所有连接到服务器端的客户端,然后循环的调用客户端的方法来实现系统广播消息。关于如何实现系统广播这里我就不作介绍,因为FluorineFx.Net为我们提供了更好的方式来实现系统广播。有兴趣的朋友请关注我的后续文章,在下一篇文章里我将详细介绍这方面的知识点。




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/162806,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
220 10
|
27天前
|
开发框架 安全 .NET
【Azure Developer】.NET Aspire 项目本地调试遇 Grpc.Core.RpcException 异常( Error starting gRPC call ... )
Error starting gRPC call. HttpRequestException: The SSL connection could not be established, see inner exception. AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
44 12
|
5月前
|
开发者 容器
flex 布局属性在实际项目中的应用场景有哪些?
flex 布局属性在实际项目中的应用场景有哪些?
|
1月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
84 23
|
3月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
3月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
172 2
|
5月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
211 6
|
6月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
106 0
|
2月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
68 7

热门文章

最新文章