您的位置:首页 > 运维架构 > Tomcat

怎么将RED5项目部署在tomcat下运行,并且red5项目嵌入到J2EE项目中

2011-07-25 14:12 417 查看
首先我要说的是,我用的是0.6 java6版本的安装包和0.6 war包,包括(Root .war admin.war,echo.war)(在这之前弄了个1.0的包 和0.8的包 都没成功,如果谁成功了告诉我下好吧)

1. 将0.6的windows安装包安装好(D/red5)

2.删除你tomcat重conf里面的catalina文件件,删除work文件夹,删除webapps\ROOT文件夹(因为这里的两个文件夹都是tomcat的,现在你要集成red5,所以删掉,ps:当你配置完下面我要说的所有后重启tomcat时这两个文件会重新的生成)

3.找到你的tomcat的wabapps,然后将那三 个war包放在wapapps下

4重启tomcat(其实现在看来Root.war admin.war echo.war 对于写项目没用,唯一有用的就是 当我们建立自己的项目时会用到root.war 加压后的文件夹里面的一些文件,这些一会说)

5.打开tomcat下webapps\ROOT\WEB-INF\classes,里面的root-web.xml.将里面的所有端口都换成8080,PS:现在看来该这里东西对我们以后写的项目也没影响,该它只是为了访问red5主页或者它里面的例子。

6.再重启tomcat,现在在浏览器中输入:http://localhost:8080 如果出现red5的主页,而不 是以往 我们熟知的tomcat主页就行了。

现在下面的才是真正我们需要的东西:

在myeclipse里面建立我们的项目如图:


前面那两 个包你们不用管,主要是red5.example.red5Server这个包,里面建个类:

import org.red5.server.adapter.ApplicationAdapter;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import org.red5.server.api.IConnection;

import org.red5.server.api.IScope;

import org.red5.server.api.Red5;

import org.red5.server.api.service.IServiceCapableConnection;

public class Application extends ApplicationAdapter {

private String userName;

//客户端调用的方法

public String callFromClient(String userName) {

System.out.println("ddd");

this.userName = userName;

callClient();

return "Hello:"+userName;

}

//服务器端调用客户端的方法

public void callClient() {

IConnection conn=Red5.getConnectionLocal();

if (conn instanceof IServiceCapableConnection) {

IServiceCapableConnection sc = (IServiceCapableConnection) conn;

sc.invoke("callFromServer", new Object[]{"hi,"+userName+" this message from server"});

}

}

}

建好后可定会报错,因为我们要用到red5的jar包 啊,我们还们引入jar包,于是我们来到0.6windows安装版的安装路径下找到red5.jar 把它拷工程的lib下,同时你也去tomcat的root文件夹下的classes里面 的lib的所以jar拷的你工程的离别下 同时你也去tomcat下找到Root文件夹,里面的web-inf下的classes里面的配置文件,除admin echo sosample -web.xml外的文件拷到你工程src下,将tomcat6\webapps\ROOT\WEB-INF下的web.xml
和log4j的配置文件拷到你的项目的web-inf下,覆盖以前的文件。到这里,你的项目基本快要完成了,接下来就是修改里面的 配置。

首先要改的就是web.xml,容器从这里找到你的服务,

将web.xml中的

<context-param>

<param-name>webAppRootKey</param-name>

<param-value>/</param-value>

</context-param>

改成

<context-param>

<param-name>webAppRootKey</param-name>

<param-value>/red5Server</param-value>

</context-param>

然后在src建立以个red5Server.xml文件,类容为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="web.context.red5Server" class="org.red5.server.Context">

<property name="scopeResolver" ref="red5.scopeResolver" />

<property name="clientRegistry" ref="global.clientRegistry" />

<property name="serviceInvoker" ref="global.serviceInvoker" />

<property name="mappingStrategy" ref="global.mappingStrategy" />

</bean>

<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.red5Server" />

<property name="handler" ref="web.handler.red5Server" />

<property name="contextPath" value="/red5Server" />

<property name="virtualHosts"

value="*,localhost, localhost:8080, 127.0.0.1:8080" />

</bean>

<bean id="web.handler.red5Server"

class="red5.example.red5server.Application" />

</beans>

想必你们也能明白这里的意思了。

然后这里就非常的重要了,打re5-core.xml,找到里面的:

<bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">

<property name="ioHandler" ref="rtmpMinaIoHandler" />

<property name="address" value="10.30.6.221" />

<property name="port" value="8080" />

<property name="receiveBufferSize" value="65536" />

<property name="sendBufferSize" value="271360" />

<property name="eventThreadsCore" value="4" />

<property name="eventThreadsMax" value="8" />

<property name="eventThreadsQueue" value="-1 " />

<property name="eventThreadsKeepalive" value="60" />

</bean>

看见“address”,这 个地方就是让我纠结2天的东西,这个地址大概意思是说“在这个地址上监听rtmp请求”(这是我个人想法,还没来及看官方文档),这个地址就写你现在本地的ip地址,我之前写的是localhost,让我连了2天都没连通,换成它默认的0.0.0.0也不行。下面的写8080,其实我想知要写个没被占的端口都可以,只要前台在连接的时候写对应的端口就行了。改好后保存。 这样你的 red5项目的服务端就是完事了。

下面写前台吧,我用Flex

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

<mx:Script>

<![CDATA[

import flash.net.*;

import flash.events.*;

import flash.utils.*;

import mx.controls.*;

private var nc:NetConnection;

public function connServer():void {

nc = new NetConnection();

nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);

nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, netSecurityError);

nc.connect(txtServerURL.text,txtUserName.text);

}

public function init():void {

// Alert.show("页面初始化完成!")

nc = new NetConnection();

nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);

nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, netSecurityError);

nc.connect("rtmp://10.30.6.221:8080/red5Server");

nc.client = this;

//Alert.show("连接完成");

}

private function netStatus(event:NetStatusEvent):void {

var connStatus:String = event.info.code;

Alert.show(connStatus);

if(connStatus == "NetConnection.Connect.Success") {

txtResult.text += "登陆成功";

nc.call("callFromClient",new Responder(callServerMethodResult,callServerMethodFault),Math.random().toString());

}

else if(connStatus == "NetConnection.Connect.Rejected")

{

//登录被拒绝

txtResult.text += event.info.application;

}

else if(connStatus == "NetConnection.Connect.Failed")

{

//登录被拒绝

txtResult.text += event.info.application;

}

}

private function netSecurityError(event:SecurityErrorEvent):void {

Alert.show("netSecurityError: " + event);

}

public function callServerMethodResult(re:String):void {

Alert.show("客户端调用服务器端方法成功,返回结果:"+re);

}

public function callServerMethodFault(fo:Object):void {

Alert.show("客户端调用服务器端方法失败:"+fo.toString());

}

public function callFromServer(re:Object):void {

Alert.show("服务器端调用客户端方法,传递的参数为:"+re.toString());

}

]]>

</mx:Script>

<mx:Label x="10" y="38" text="输入用户名:"/>

<mx:TextInput x="83" y="36" id="txtUserName" width="167"/>

<mx:Label x="10" y="10" text="连接的服务器:"/>

<mx:TextInput x="83" y="8" id="txtServerURL" text="rtmp://10.30.6.221:8080/red5Server"/>

<mx:Button x="10" y="64" label="连接到red5服务器" width="240" click="this.connServer()"/>

<mx:TextArea x="10" y="94" width="240" height="154" id="txtResult"/>

</mx:Application>

这个项目要映射到你的J2EE项目的目录下,比如这里我是映射到red5Server下,输入路径为/red5Server/chart

编写完成后可以直接点Flexbulder3运行,也可以在地址栏中输入:http://localhost:8080/red5Server/chart/chart.html

如果在局域网中测试最好用80端口,因为80默认能穿过防火墙。

运行结果如图:



在看看你的myeclipse后台,肯定输入了ddd符号,这说明前台掉后台的方法成功了。现在就可以进行的需要的red5开发了。

字敲完了,休息了。 如果哪里有错还请原谅,都是带着瞌睡敲的。你可以说出来大家一起研究下,有问题就留言哈。

2012,.03.15

=================================一下是最近做个一个小东西,继续更新中==========================================



建议用red5高版本,因为0.6的是spring2.0



======================2012年3月31:项目更新,用red5 0.8版 ,局域网内测试 上传流量可达80多K,代码在我的资源里 需要的可以去下载==================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: