Hprose在云计算平台上开发 高效跨平台

        云计算近年来非常火热,已经成为目前继SOA、Web2.0之后又一个热门的话题。Amazon.com、Google和Microsoft都相继推出了自己的云计算平台。Microsoft的云计算平台叫做Azure,最初发布的开发包支持Visual Studio 2008,最新推出的Visual Studio 2010更是集成了Azure开发工具,让Azure云计算开发变得更加方便容易。

  Hprose(High Performance Remote Object Service Engine)是一款高性能跨语言跨平台的远程对象服务引擎,它支持众多语言和平台,包括主流的.NET、Java、PHP、Python、Ruby、JavaScript、ActionScript、Delphi、FreePascal、Objective-C、ASP、Perl、C++等。在这些支持的语言之间可以实现方便且高效的互通,能够有效的取代WebService实现跨语言跨平台高几倍效率的分布式电信级的解决方案。

  在云计算开发应用中网络通信速度效率尤为重要。支持上面提到的所有云计算平台,但本文将重点对第三方通信方法(Hprose)在微软云计算平台上如何应用做一个详细介绍。Hprose能使您能高效便捷的创建功能强大的跨平台、跨语言、分布式的应用。

  准备

  开始之前需要首先安装以下环境:

  Windows操作系统(推荐Windows7)

  Visual Studio 2008或2010

  Windows Azure Tools for Microsoft Visual Studio 1.1

   Hprose开发包(无需安装)

  试用下载地址:http://www.hprose.com/

  PHP5(Non Thread Safe版本)

  其中,PHP5仅用于Web CGI Role方式下。

  开始

  打开Visual Studio,选择“File->New->Project…”,然后选择Cloud->Windows Azure Cloud Service,我们给该项目取名为HproseOnCloudService,然后点OK,如图1所示。

  图1

  在新建云服务项目中,我们会看到选择Role的画面,如图2所示。

  图2

  Hprose支持在ASP.NET Web Role、Worker Role和CGI Web Role这三种规则进行部署,所以这里我们选择这三种规则,并分别取名为HproseServiceWebRole、HproseServiceWorkerRole和HproseServiceWebCgiRole。然后点击OK。项目就建好了。

  下面我们来看一下在这三种不同的规则下,如何开发部署Hprose服务。

Hprose在ASP.NET Web Role下的服务发布

  先看第一种规则——ASP.NET Web Role。

  HproseServiceWebRole项目建立后,会默认生成一个Default.aspx页面。我们可以直接从修改它开始,但在修改之前,我们还需要做点小工作,那就是添加Hprose.dll引用。如图3所示。

Hprose在ASP.NET Web Role下的服务发布 

  图3

  在项目的References上点击右键,选择Add Reference…,然后选择Hprose.dll即可。因为Azure目前只支持.NET Framework 3.5,尚不支持.NET Framework 4(虽然Hprose支持)。所以Hprose.dll也要选择相应的版本,另外System.Numerics.dll也需要一同添加。

  接下来,将Default.aspx中多余的HTML和空白全部删除,只保留第一行的ASP.NET标签。如图4所示。

Hprose在ASP.NET Web Role下的服务发布

  图4

  然后我们为工程添加一个新建C#的Class文件,名字任意,这里我们取名为Example.cs。如图5所示。

Hprose在ASP.NET Web Role下的服务发布

  图5

  然后编辑其代码如下:

Hprose在ASP.NET Web Role下的服务发布

  这个类用于定义我们要发布的服务,你会发现我们定义的类不需要继承任何接口。这里限于篇幅我们发布的方法都比较简单,实际上除了可以返回简单类型、容器类型以外,还可以返回复杂的可序列化对象类型,关于Hprose支持类型的详细介绍请参见Hprose for C#手册。

  接下来我们修改Default.aspx.cs文件:

Hprose在ASP.NET Web Role下的服务发布

  这样,一个Hprose服务器就完成。

  默认情况下,服务端口号是80,但80通常被IIS所占据,所以Azure会自动选择81端口,为了使用固定端口,我们这里手动将端口号改为8001。如图6所示。

Hprose在ASP.NET Web Role下的服务发布

  图6

  当然,上面这一步是可选的,你也可以省略这一步。

  接下来选择按F5,服务会自动进行部署。浏览器会自动打开,并显示一下内容:

Hprose在ASP.NET Web Role下的服务发布

这说明服务已经成功发布了。接下来我们就可以用Hprose客户端来调用它了。

  Hprose提供了专业的服务调试工具——Nepenthes(忘忧草),通过它,你不需要编写一行代码,就可以直接调试服务器

  只需要输入服务器网址,然后点击Get Functions就可以得到所有的服务方法。

  每个方法都可以直接输入参数进行调用,多个参数之间使用逗号分隔,参数格式以JSON方式输入。

  另外,该工具是多国语言的,目前支持英文、简体中文和繁体中文。

  下面是使用该工具调试刚刚发布的服务的截图,如图7、图8和图9所示。

  图7

  图8

  图9

  这里的Hprose服务是使用C#编写的,但是你可以在任何Hprose支持的语言中进行调用,因为本文重点是介绍Hprose服务在微软云平台上的开发与部署,因此这里就不再为客户端举例了,如果读者有兴趣,可以参考Hprose手册。

  Hprose服务在ASP.NET Web Role下发布从灵活性上来说比较强大,虽然上面我们的例子是按照请求模式发布的服务,但实际上你还可以按照全局模式或者会话模式来发布服务,对服务的发布也可以细化到每一个方法,甚至可以在发布的方法中存取ASP.NET的上下文对象。但是从性能上来说,这种方式不够高效,性能仅仅跟WCF Service Role的BasicHttpBinding的性能相当,比WSHttpBinding的性能高1倍。难道还可以比WCF Service Role更高效吗?是的。完全可以。下面要介绍的Worker Role方式下的Hprose服务可以比的WCF Service Role的BasicHttpBinding的性能高3-5倍,比WSHttpBinding的性能高出7-9倍,几乎可以高出一个数量级。

Hprose在Worker Role下的服务发布

  跟ASP.NET Web Role下类似,首先要添加Hprose引用,这一步操作相同,这里不再重复。

  之后添加一个Example.cs,内容也与ASP.NET Web Role下的Example.cs类似,仅仅是名称空间有点变化(从HproseServiceWebRole变为HproseServiceWorkerRole)。这里也就不再重复列出代码了。

  下面我们看重点,那就是对WorkerRole.cs的修改,主要修改的是它的Run方法,其它方法无需改动,修改后的代码如下:

#div_code img{border:0px;}<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt using System.Diagnostics;

  using System.Linq;

  using System.Net;

  using System.Threading;

  using Microsoft.WindowsAzure.Diagnostics;

  using Microsoft.WindowsAzure.ServiceRuntime;

  using Hprose.Server;

  namespace HproseServiceWorkerRole {

  
public class WorkerRole : RoleEntryPoint {

  
public override void Run() {

  
// This is a sample worker implementation. Replace with your logic.

  Trace.WriteLine(
" HproseServiceWorkerRole entry point called " , " Information " );

  HproseHttpListenerServer server
= new HproseHttpListenerServer( " http://127.0.0.1:8010/ " );

  server.Methods.AddInstanceMethods(
new Example());

  server.Start();

  Trace.WriteLine(
" Hprose Server Started " , " Information " );

  
while ( true ) Thread.Sleep( 0 );

  }

  
public override bool OnStart() {

  
// Set the maximum number of concurrent connections

  ServicePointManager.DefaultConnectionLimit
= 12 ;

  DiagnosticMonitor.Start(
" DiagnosticsConnectionString " );

  
// For information on handling configuration changes

  
// see the MSDN topic at http: // go.microsoft.com / fwlink / ?LinkId = 166357 .

  RoleEnvironment.Changing
+= RoleEnvironmentChanging;

  return base.OnStart();

  }

  
private void RoleEnvironmentChanging( object sender, RoleEnvironmentChangingEventArgs e) {

  
// If a configuration setting is changing

  
if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) {

  
// Set e.Cancel to true to restart this role instance

  e.Cancel
= true ;

  }

  }

  }

  }

转载于:http://blog.itpub.net/8632205/viewspace-666379/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值