FMS 学习札记

关于FAR文件

你可以把FAR文件放置在一个应用程序的两个位置中:一个是应用程序目录,一个是脚本库路径。

如果你把FAR文件放置在应用程序目录中,则FAR的名字必须是main.far或<appname>.far,在这里

<appname>是应用程序目录的名字。

例如,如果一个应用程序位于C:/samples/foo,则你可以把所有来自应用程序文件夹的必需的脚本文件

打包成main.far或<appname>.far并把它放置在C:/samples/foo中。当服务器加载一个应用程序时,服务器会在应用程序文件夹中的main.far或 <appname>.far文件中寻找主脚本。如果没有FAR文件被找到,则服务器就会在应用程序文件夹中寻找main脚本。

当FAR文件中的脚本引用了一个脚本库路径中的其他脚本时,Macromedia建议你把来自这个路径中的

所有必需的脚本文件都放置到这个FAR文件。这种安排可以防止应用程序从一台不同的计算机上装载这个脚本的一个具有相同名字的不同版本。当一个脚本引用FAR文件中的一个脚本文件时,服务器总是首先在这个FAR文件中寻找这个脚本文件,如果没有找到才会在应用程序目录中继续进行寻找。当其他的脚本在主脚本中被引用时,你必须在FAR文件中维持这种路径。

要理解如何在一个应用程序中使用FAR文件,思考下面的例子,这个例子是基于一个名为testFAR的应

用程序的。下图展示了这个testFAR应用程序的目录: 名为testFAR.asc的主脚本位于scripts目录中:

TTGame出品 Flash Media Server 2.0 中文翻译版帮助文档 - 59 -

感谢Adobe Macromedia Flash Media Server开发小组的英文原版

testFAR.asc文件使用脚本库目录(<installdir>\scriptlib)中提供的Web服务。testFAR开发者不确定这个

应用程序会被部署到什么地方,因此,他们把webServices文件夹中所有的ASC文件都包括了以便确保主脚本总是能够找到这个Web服务。当WebServices.asc文件从主脚本中被加载时,load("webServices/WebServices.asc")会被调用。这对于在FAR文件中维持相同的层次结构是非常重要的。要维持这种层次结构,拷贝来自<installdir>\scriptlib的webServices文件夹,以便其与主脚本处于相同的层

级,就像下面的例子中所展示的这样:

现在,脚本已经被打包进FAR文件中了。在一个命令解释程序中打开Archive Compiler(档案编译器)

工具并运行下面的命令:

far -package -archive main.far -files testFAR.asc webServices\*.asc

最后,用main.far文件替换应用程序目录中的scripts文件夹。

要检验FAR文件的内容,在WinZip中打开这个文件。核实FAR文件中的脚本的路径的设置以便主脚本

可以正确的引用它们是非常重要的。在这个testFAR的例子中,解压后的FAR文件看起来应该像下面所展示的这样:你也可以在Flash Media Server的脚本库路径中包含FAR文件。脚本库路径被定义于Flash Media Server安装目录下的conf\fms.ini文件中。在这种情况下,FAR文件的作用就像一个目录;代替从一个目录中寻找脚本文件,Flash Media Server在FAR文件中寻找脚本文件。

脚本库在fms.ini文件中的定义如下例所示:

APP.JS_SCRIPTLIBPATH = C:\Program Files\Macromedia\Flash Media Server 2\scriptlib

要在脚本库路径中包含一个FAR文件,使用下面的代码:

APP.JS_SCRIPTLIBPATH = C:\Program Files\ Macromedia\Flash Media Server

2\scriptlib;C:\FMS\myLibrary.far

把脚本编译成字节代码要加速装载一个应用程序实例所需的时间,你可以使用FAR工具把一个或多个ASC或JS文件编译成字节代码(bytecode)。

要加速装载一个应用程序实例所需的时间,你可以使用FAR工具把一个或多个ASC或JS文件编译成字

节代码(bytecode)。

输出文件与输入文件位于同一个文件夹并具有相同的名字,但.asc或.js文件扩展名将被.ase文件扩展名

替换。如果输入文件没有一个.asc或.js扩展名,则.ase扩展名会被添加到文件名后。

要把服务器端脚本编译成字节代码:

1. 打开你的操作系统的命令解释程序。

2. 在提示符下输入far -compile连同你想要使用的选项。

注意:把FAR工具所在的位置添加到PATH环境变量中。这可以让你无需指定完整的路径就可以运

行FAR工具。

运行档案编译器工具创建一个脚本包的语法如下所示:

c:\> far -compile [-v <version>] [-fv <version>] [-e <date>] [-hdr <header>] [-n] [-h [<command>]]

<file1> [<file2> ...

<fileN>]

下表描述了-bytecode命令可用的命令行选项:

选项 描述

-v <version> 可选的。指定版本,它将被编码为长字节的版本域签名。如果没

有指定的话,则这个选项默认为.0。这个选项也被作为一个可选的标题添加,其看起来像这样“version:1.0\n”。

-fv <version> 可选的。指定使用这个文件所推荐的Flash Media Server版本。这个版本号被编码为

字节长的fms_version域标题。如果没有被指定的话,默认为.6。这个选项也被作为一个可选的标题添

加,其看起来像这样“fmsver:1.6\n”。 注意:这个选项把内容添加到ASE文件,但目前Flash Media Server还不使用这个内容。

-e <date> 可选的。指定这个文件的期满日期。日期以mm/dd/yyyy形式被指定。在这个日期之

后,这个文件将不再能够读取。如果没有指定的话,这个选项默认为,这意味着文件永远不会过期。

这个选项可能是有用的,假如你想给这个文件赋予一个试用期的话。如果设置了话(比如,/31/2003),则这个日期也被作为一个可选的标题添加,日期被格式化成像这样“expires:Sat Dec 31 00:00:00 2003\n”。 注意:这个选项把内容添加到ASE文件,但Flash Media Server目前还不使用这个内容。

-hdr <header> 可选的。指定一个要嵌入到输出文件中的用户定义的标题。

标题是以Name:Value

这样的形式指定的。要指定多个标题的话,你必须使用另一个-h <header>选项来进行指定。例如,casc

-h name1:value1 -h name2:value2。 注意:这个选项把内容添加到ASE文件,但Flash Media Server目前还不使用这个内容。

-n 可选的。当运行这个工具时不显示Macromedia的版权标志。如果你正在从一个自动化脚本中运行这个工具的话,你可能会想要设置这个选项。

-h [<command>] 可选的。显示这个工具的使用帮助。你可以可选的在-help选项的后面指定一个命令以

获得某个特定命令选项的更详细的信息。

//-------------------------------------------------------------------------------------------------------------------------------

以往 Flash Communication Server 執行的 Server-Side ActionScript
完全是以原始碼來執行
原始碼容易外洩,而且檔案一多,部署也比較麻煩
Flash Media Server 內附一個好用的工具
位於 FMS 安裝目錄下
C:\Program Files\Macromedia\Flash Media Server 2\tools\far.exe
可以將你的 SSAS 程式碼編譯為 bytecode,以及打包壓縮為 *.far
除了保護原始碼、容易部署以外
文件上說還可以加快 application 啟動速度
以下示範利用 Ant 來編譯打包一個 FMS Application
<?xml version=”1.0″ encoding=”UTF-8″?>
<project name=”FMS SSAS” default=”package”>
<property name=”src” location=”src” />
<property name=”build” location=”build” />
<property name=”dist” location=”dist” />
<property name=”far”
location=”C:\Program Files\Macromedia\Flash Media Server 2\tools\far.exe” />
<fileset id=”ascFiles” dir=”${build}”>
<include name=”**/*.asc” />
</fileset>
<target name=”init”>
<tstamp />
<mkdir dir=”${build}” />
<mkdir dir=”${dist}” />
</target>
<target name=”copy” depends=”init”>
<copy todir=”${build}”>
<fileset dir=”${src}/” />
</copy>
</target>
<target name=”compile” depends=”copy”>
<apply executable=”${far}” dir=”${build}”>
<arg value=”-compile” />
<fileset refid=”ascFiles” />
</apply>
<delete>
<fileset dir=”${build}” includes=”**/*.asc” />
</delete>
</target>
<target name=”package” depends=”compile”>
<exec executable=”${far}” dir=”${build}”>
<arg value=”-package” />
<arg value=”-archive” />
<arg value=”${dist}\main.far” />
<arg value=”-files” />
<arg value=”*.ase” />
<arg value=”components\*.ase” />
</exec>
</target>
</project>
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/1849

posted @ 2009-05-17 12:30  Andy  阅读(682)  评论(0编辑  收藏  举报