当前位置: 代码迷 >> Web前端 >> Red5 怎的创建一个应用
  详细解决方案

Red5 怎的创建一个应用

热度:436   发布时间:2012-11-22 00:16:41.0
Red5 怎样创建一个应用
应用文件夹
red5的应用都在“webapps”文件夹中,每个应用为一个文件夹。要创建应用,首先在“webapps”文件夹中新建一个文件夹,按照惯例文件夹名称就是应用的名称。
在新应用文件夹中新建一个“WEB-INF”文件夹,用来放置配置文件和类文件。你可以用Red5中"doc/templates/myapp"目录下的模板。
red5中“webapps”下的所有文件夹中都会有一个“WEB-INF”文件夹来放置配置文件。

配置
主配置文件为“web.xml”,参数如下:

GlobalScope
globalScope参数值为default
<context-param>
    <param-name>globalScope</param-name>
    <param-value>default</param-value>
</context-param>

contextConfigLocation
该参数指定了应用中的控制器(handler)配置文件。控制器(handler)配置文件指定了相关类,这个类用来通知应用程序客户端是连接或断开,同时提供客户端调用的方法。
另外,配置文件也指定了类的域结构。
指定配置文件可以使用通配符来指定多个文件:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/red5-*.xml</param-value>
</context-param>

locatorFactorySelector
指定根应用程序上下文配置文件通常是"red5.xml":
<context-param>
    <param-name>locatorFactorySelector</param-name>
    <param-value>red5.xml</param-value>
</context-param>

parentContextKey
父上下文名称,一般是“default.context”:
<context-param>
    <param-name>parentContextKey</param-name>
    <param-value>default.context</param-value>
</context-param>

log4jConfigLocation
指定logging文件
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>


webAppRootKey
应用的唯一名称,是一个公开的名称
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>/myapp</param-value>
</context-param>


控制器配置(Handler configuration)
该配置文件必须至少包含三个beans:

上下文(Context)
context bean名称有个保留名web.context,用来映射路径到域,同时用来查找服务和控制器(handler)。默认的类为org.red5.server.Context
默认指定方式为:
<bean id="web.context" class="org.red5.server.Context" 
      autowire="byType" />

每个应用程序只有唯一的上下文(context)。然而这个上下文(context)能跨多个域共享。

域(Scopes)
每个应用程序至少需要一个域(scope),用来将控制器(handler)关联到上下文(context)和服务器(server)。域用来建立一个树,这样客户端能够链接到每个节点和在域中共享对象(比如共享对象或直播流)。你可以将域成房间或实例。
默认的域(scope)通常名称为 web.scope,但是这个名字可以任意的选择。
这个bean有以下的属性:
  server:设置全局服务器域red5.server
  parent:设置父级域通常是global.scope.
  context:设置服务上下文的域,即当前域, 用上面提到的web.context
  handler:设置域的控制器(下面会提到)
  contextPath:当连接到域的时候用到
  virtualHosts:用逗号分割开,域(scope)运行的一组主机名或者IP地址
实例:
<bean id="web.scope" class="org.red5.server.WebScope"
      init-method="register">
    <property name="server" ref="red5.server" />
    <property name="parent" ref="global.scope" />
    <property name="context" ref="web.context" />
    <property name="handler" ref="web.handler" />
    <property name="contextPath" value="/myapp" />
    <property name="virtualHosts" value="localhost, 127.0.0.1" />
</bean>

你可以将contextPath和virtualHosts的值放在独立的文件中。这样你需要另外一个bean
<bean id="placeholderConfig"
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/red5-web.properties" />
</bean>

比如一个 red5-web.properties含下面的数据
webapp.contextPath=/myapp
webapp.virtualHosts=localhost, 127.0.0.1

域的属性值可以这样设置:
<property name="contextPath" value="${webapp.contextPath}" />
<property name="virtualHosts" value="${webapp.virtualHosts}" />

控制器(Handlers)
每个上下文(context)需要一个控制器,控制器实现一个方法当客户端链接或断开到域的时候调用,同时可以增加客户端调用的方法。控制器需要实现org.red5.server.api.IScopeHandler接口,当然你也可以再实现另外的类来控制访问共享对象(shareobject)或流数据(streams).
基础类中org.red5.server.adapter.ApplicationAdapter实现了该接口,你可以通过查看api文档了解该类详情。
域控制器配置如下:
<bean id="web.handler" 
      class="the.path.to.my.Application" 
      singleton="true" />

id参数值就是上面提到的设置。
如果你不需要在服务端实现任何逻辑,就可以使用red5提供的默认控制器:
<bean id="web.handler" 
      class="org.red5.server.adapter.ApplicationAdapter" 
      singleton="true" />

简单例子
下面的控制器(handler)例子用了很少的代码实现:
package the.path.to.my;

import org.red5.server.adapter.ApplicationAdapter;

public class Application extends ApplicationAdapter {
    
    public Double add(Double a, Double b){
        return a + b;
    }

}

假设控制器就如上面的,你能用下面的actionscipt调用:
nc = new NetConnection();
nc.connect("rtmp://localhost/myapp");
nc.onResult = function(obj) {
    trace("The result is " + obj);
}
nc.call("add", nc, 1, 2);

得到的结果为:
The result is 3