提升关键词策略与全面网站改进:这些优化的英文名称是什么?

优化的英文单词是 "refinement" 或 "enhancement"。

在英语中,"refinement" 可以作为动词(verb)使用,表示“使变得更好或更精细”,例如 "To make something better or more refined",即改善某事物。名词 "refinement" 则指“改进的过程或方法”,它涉及到对系统或设计进行的一系列提升,尤其是那些运用了高级数学技术的策略。

"refinement" 这两种形式在表达上有所不同:动词形式强调的是操作或改变的过程,而名词形式则侧重于结果或方法。例如,当我们谈论 "refine a process"(改进过程)时,我们关注的是实际的操作;而提到 "refinement methods"(改进方法)时,我们关注的是提高效率的计划或技术手段。

总的来说,"refinement" 在英文中是一个多功能的词汇,既可以作为动词,强调改进和最大化,也可以作为名词,描述一种追求更好的状态或方法。

这个英语单词的意思是 "meaning" 或 "definition"。

什么是 "Remoting",简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说 "Remoting" 就是 DCOM 的一种升级,它改善了很多功能,并很好地融合到 .Net 平台下。Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用 "Remoting" 的原因。为什么呢?在 Windows 操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。

在 "Remoting" 中是通过 "channel" 来实现两个应用程序域之间对象的通信的。首先,客户端通过 "Remoting",访问 "channel" 以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过 "Remoting" 连接服务器,获得该服务对象并通过序列化在客户端运行。

在 "Remoting" 中,对于要传递的对象,设计者除了需要了解 "channel" 的类型和端口号之外,无需再了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务器端对象,而是获得它的引用。这既保证了客户端和服务器端有关对象的松散耦合,同时也优化了通信的性能。

"Remoting" 的两种 "channel"

"Remoting" 的 "channel" 主要有两种:Tcp 和 Http。在 .Net 中,System.Runtime.Remoting.Channel 中定义了 IChannel 接口。IChannel 接口包括了 TcpChannel 通道类型和 HttpChannel 通道类型。它们分别对应 "Remoting" 通道的这两种类型。

TcpChannel 类型放在名字空间 System.Runtime.Remoting.Channel.Tcp 中。Tcp 通道提供了基于 Socket 的传输工具,使用 Tcp 协议来跨越 "Remoting" 边界传输序列化的消息流。TcpChannel 类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。HttpChannel 类型放在名字空间 System.Runtime.Remoting.Channel.Http 中。它提供了一种使用 Http 协议,使其能在 Internet 上穿越防火墙传输序列化消息流。默认情况下,HttpChannel 类型使用 Soap 格式序列化消息对象,因此它具有更好的互操作性。通常在局域网内,我们更多地使用 TcpChannel;如果要穿越防火墙,则使用 HttpChannel。

远程对象的激活方式

在访问远程类型的一个对象实例之前,必须通过一个名为 "activation" 的进程创建它并进行初始化。这种客户端通过 "channel" 来创建远程对象,称为对象的 "activation"。在 "Remoting" 中,远程对象的 "activation" 分为两大类:服务器端激活和客户端激活。

服务器端激活,又叫做 Well-Known 方式,很多又翻译为知名对象。为什么称为知名对象激活模式呢?是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符 (URI) 上发布这个类型。然后该服务器进程会为此类型配置一个 Well-Known 对象,并根据指定的端口或地址来发布对象。.Net Remoting 把服务器端激活又分为 SingleTon 模式和 SingleCall 模式两种。

SingleTon 模式:此为有状态模式。如果设置为 SingleTon 激活方式,则 "Remoting" 将为所有客户端建立同一个对象实例。当对象处于活动状态时, SingleTon 实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon 实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为 SingleTon 方式,则第一个客户获得值为 1,第二个客户获得值为 2,因为他们获得的对象实例是相同的。如果熟悉 Asp.Net 的状态管理,我们可以认为它是一种 Application 状态。

SingleCall 模式:SingleCall 是一种无状态模式。一旦设置为 SingleCall 模式,则当客户端调用远程对象的方法时, "Remoting" 会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由 GC 自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是 1。我们仍然可以借鉴 Asp.Net 的状态管理,认为它是一种 Session 状态。

客户端激活。与 Well-Known 模式不同, "Remoting" 在激活每个对象实例的时候,会给每个客户端激活的类型指派一个 URI。客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。SingleCall 模式和客户端激活模式是有区别的:首先,对象实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求,就实例化;而 SingleCall 则要等到调用对象方法时再创建。其次,SingleCall 模式激活的对象是无状态的,对象生命期的管理是由 GC 管理的,而客户端激活的对象则有状态,其生命周期可自定义。其三,两种激活模式在服务器端和客户端实现的方法不一样。尤其是在客户端,SingleCall 模式是由 GetObject() 来激活,它调用对象默认的构造函数。而客户端激活模式,则通过 CreateInstance() 来激活,它可以传递参数,所以可以调用自定义的构造函数来创建实例。

客户端启动。与知名模式不同,远程调用在启动每个对象实例时,会为每个客户端启动的类型分配一个统一资源标识符(URI)。客户端启动模式一旦接收到客户端的请求,将为每个客户端都创建一个实例引用。单次调用模式和客户端启动模式存在差异:首先,对象实例创建的时间不同。客户端启动方式是客户一旦发出调用的请求,就实例化;而单次调用则是要等到调用对象方法时再创建。其次,单次调用模式启动的对象是无状态的,对象生命周期的管理由垃圾回收器(GC)负责,而客户端启动的对象则有状态,其生命周期可自定义。第三,两种启动模式在服务器端和客户端的实现方法不同。尤其是在客户端,单次调用模式是通过 GetObject()来启动,它调用对象默认的构造函数。而客户端启动模式,则通过CreateInstance()来启动,它可以传递参数,因此可以调用自定义的构造函数来创建实例。

远程对象的定义

前面提到,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。因此在远程调用中,对于远程对象有一些必须的定义规范需要遵循。

由于远程调用传递的对象是以引用的方式,因此所传递的远程对象类必须继承可序列化引用对象(MarshalByRefObject)。MSDN对可序列化引用对象(MarshalByRefObject)的说明是:可序列化引用对象(MarshalByRefObject)是那些通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。不是从可序列化引用对象(MarshalByRefObject)继承的对象会以隐式方式按值封装。当远程应用程序引用一个按值封装的对象时,将跨越远程处理边界传递该对象的副本。因为您希望使用代理方法而不是副本方法进行通信,因此需要继承可序列化引用对象(MarshalByRefObject)。

在远程调用中能够传递的远程对象可以是各种类型,包括复杂的数据集(DataSet)对象,只要它能够被序列化。远程对象也可以包含事件,但服务器端对于事件的处理比较特殊,我将在本系列之三中介绍。

服务器端

根据第一部分所述,根据启动模式的不同,通道类型的不同,服务器端的实现方式也有所不同。大体上,服务器端应分为三步:

1、注册通道

要跨越应用程序域进行通信,必须实现通道。如前所述,远程调用提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。

注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后使用名字空间: System.Runtime.Remoting.Channel.Tcp。在实例化通道对象时,将端口号作为参数传递。然后再调用静态方法 RegisterChannel()来注册该通道对象即可。

2、注册远程对象

注册了通道后,要能启动远程对象,必须在通道中注册该对象。根据启动模式的不同,注册对象的方法也不同。

对于知名对象,可以通过静态方法 RemotingConfiguration.RegisterWellKnownServiceType()来实现,注册对象的方法基本上和单例模式相同,只需要将枚举参数WellKnownObjectMode改为SingleCall就可以了。

3、注销通道

如果要关闭远程调用的服务,则需要注销通道,也可以关闭对通道的监听。在远程调用中当我们注册通道的时候,就自动开启了通道的监听。而如果关闭了对通道的监听,则该通道就无法接受客户端的请求,但通道仍然存在,如果你想再一次注册该通道,会抛出异常。

以上所转载内容均来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2020@163.com,本人将予以删除。
THE END
分享
二维码
< <上一篇
下一篇>>