上一节我们做了一个客户端调用服务端的例子 这一节我们来换换 服务端调用客户端的例子
配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>red5Demo2</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/red5Demo2</param-value>
</context-param>
<listener>
<listener-class>org.red5.logging.ContextLoggingListener</listener-class>
</listener>
<filter>
<filter-name>LoggerContextFilter</filter-name>
<filter-class>org.red5.logging.LoggerContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggerContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>rtmpt</servlet-name>
<servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/fcs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/open/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/close/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/send/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/idle/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>/streams/*</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
</web-app>
red5-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/red5-web.properties" />
</bean>
<bean id="web.context" class="org.red5.server.Context"
autowire="byType" />
<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="${webapp.contextPath}" />
<property name="virtualHosts" value="${webapp.virtualHosts}" />
</bean>
<bean id="web.handler" class="org.red5.demos.Application" />
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
</beans>
red5-web.properties
webapp.contextPath=/red5Demo2
webapp.virtualHosts=*, localhost, localhost:8088, 127.0.0.1:8088
接着是Java 服务端
public class Application extends ApplicationAdapter implements IPendingServiceCallback {
private IScope appScope;
public Application(){
log.info("myDemo created");
System.out.println("myDemo created");
}
public boolean appStart(IScope app) {
log.info("myDemo appStart");
System.out.println("myDemo appStart");
this.appScope = app;
return true;
}
public boolean appConnect(IConnection conn, Object[] params) {
log.info("myDemo appConnect");
System.out.println("connect");
IServiceCapableConnection sc = (IServiceCapableConnection)conn;
sc.invoke("clientMethod", new Object[]{"One",1}, this);
return super.appConnect(conn, params);
}
public void appDisconnect(IConnection conn) {
log.info("myDemo appDisconnect");
super.appDisconnect(conn);
}
public void resultReceived(IPendingServiceCall arg0) {
System.out.println("来自客户端的返回值 :" + arg0.getResult());
}
}
要接收客户端的返回值 需实现 IPendingServiceCallback 接口 重写 resultReceived 方法
sc.invoke("clientMethod", new Object[]{"One",1}, this);
此处调用了客户端的 clientMethod 方法 参数第一个为字符串 第二个为 数值型 其中 this 为实现了 IPendingServiceCallback 接口的实例对象 此处实现该接口的为本类 所以为 this
接下来是客户端代码
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Red5 Connect Test" creationComplete="appinit()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.Event;
var command:String="rtmp://localhost/red5Demo2";
var mync:NetConnection=new NetConnection();
var client1:Object = new Object();
function netStatusHandler(sevt:NetStatusEvent):void{
}
function appinit(){
mync.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
}
function serverConnect():void{
out_txt.text="Connectting ... ...";
client1.clientMethod = this.clientMethod;
mync.client = this.client1;
mync.connect(command);
trace("serverConnect:"+command);
}
public function clientMethod(str:String, num:Number):String{
Alert.show("str: "+ str +" num:" + num);
return "客户端方法被调用....";
}
]]>
</mx:Script>
<mx:Style>
WindowedApplication
{
background-color:"0xffffff";
background-alpha:"0.5";
}
</mx:Style>
<mx:Label y="100" text="连接状态:未连接" horizontalCenter="0" fontSize="12" fontWeight="normal" id="out_txt" condenseWhite="true" height="150"/>
<mx:Button y="254" label="点击我连接Red5" fontSize="11" fontWeight="normal" horizontalCenter="0" click="serverConnect()"/>
</mx:WindowedApplication>
当连接服务端后 服务端会调用客户端的clientMethod 方法 弹出对话框
到此服务端调用客户端方法的例子结束
分享到:
相关推荐
例如,无限资源的功能可以让玩家迅速建造大规模军队,快速研究高级科技;无敌或无限生命值的设定则让玩家在对抗敌人的过程中无惧损失。 不过,使用trainer 在线游戏可能会违反游戏公平竞争的规定,甚至可能导致账号...
### IBM Redbook案例研究:AIX与WebSphere在企业基础设施中的集成 IBM Redbook的这份案例研究详尽地探讨了如何在企业级架构中整合IBM的AIX操作系统和WebSphere应用服务器,尤其聚焦于与微软的Active Directory进行...
《N体问题与Nbody模拟算法解析》 在物理学领域,N体问题是一个经典而复杂的课题,它涉及多个天体之间的引力相互作用。Nbody问题的解决方案对于理解宇宙中的星系形成、恒星运动以及行星系统的演化至关重要。在这个...
研究结果显示,Re基因被定位在甘蓝的C09连锁群上,且位于三个SSR标记(C9Z1、C9Z16-1和C9Z96)之间,与Re基因的距离分别为6.7、1.0和2.1cM。其中,C9Z1和C9Z96位于基因同一侧,而C9Z16-1则位于另一侧。 SSR(简单...
标题《RedTeam Security-Social Engineering Detect and Mitigate-18.pdf》和描述提到了这本书的内容是关于检测和缓解针对公司的针对性网络钓鱼(spearphishing)和物理攻击。通过这些信息,我们可以总结出以下几点...
【jbpm学习积累】 jbpm,全称是Java Business Process Management,是一款开源的工作流和业务流程管理系统,由Red Hat公司维护。它允许开发者通过模型驱动的方式来设计、执行和管理业务流程,提供了高度灵活且可...
FRET探针由两条相邻的探针组成,其中一条探针的5'端标记FAM,另一条的3'端标记Red 640,当探针结合到模板上时,FRET效应产生荧光。这两种探针模式都提供实时信号,提高特异性并减少假阳性。FRET探针发出的是非累积...
然后,小红书推出了购物笔记,在这个社区内,消费者不仅可以观看其他人的海外购物笔记心得,还可以在社区共享平台中与笔记发布者进行交流和互动,也可以分享自己的心得体会,从而积累了大量的活跃用户,平台为他们...
5. **单片机与ARM体系结构**:熟悉单片机的基本操作以及ARM架构的特点。 6. **数字电路基础知识**:对于电路设计有一定的了解,有助于更好地理解硬件接口。 7. **ARM+Linux应用程序开发**:在具备了一定的基础之后,...
**jQuery 研究 Demo** 本 Demo 是作者在学习 jQuery 的过程中积累的成果,旨在帮助初学者更好地理解和应用 jQuery 这一强大的 JavaScript 库。jQuery 以其简洁的语法和丰富的功能,大大简化了 JavaScript 中的 DOM ...
标题中的"DotNET.jl:Julia:red_heart_selector:.NET"形象地表达了这个库的核心功能,即在Julia中选用并热爱.NET。 首先,我们来了解Julia。Julia是一种高性能的动态编程语言,设计用于数值计算、科学计算和数据...
心理学家Red Fiedle和他的同事们近期进行的一项研究揭示了智力和经验在不同工作压力和任务类型下的作用。他们收集了智力、经验、表现和工作压力的数据。总体来看,这些变量之间没有明显的联系。无论智商高或低,经验...
在中国,自1998年起,国家教育科研网CERNET加入了全球IPv6测试床6Bone,推动了IPv6的研究与应用。 本文主要介绍了如何在Linux环境下模拟IPv6双栈路由器,以便构建小型的IPv6网络环境。在Red Hat Linux 2.4.20-18...
标题中的“centos积累.rar_Linux/Unix编程_GO__Linux/Unix编程_GO_”表明这是一个与CentOS操作系统、Linux/Unix编程以及Go语言相关的资源集合。这个压缩包可能包含了一系列文档或代码示例,用于帮助用户学习和理解...
- **Randy Dyess** 和 **Robert Marda**:他们在SQL Server的灾难恢复和高可用性方面有深厚的积累。 - **Sean Burke** 和 **Steve Jones**:这两位作者在SQL Server的整体架构和设计方面有着丰富的经验。 ### 四、...
#### 三、基于决策树的属性约简方法(BD-RED) ##### 3.1 方法概述 针对数据挖掘过程中数据库精炼的需求,提出了一种新的属性约简方法——基于决策树的属性约简方法(BD-RED)。该方法的核心思想是利用决策树的...
1. 美国麻省理工学院的研究人员开发了高效的有机太阳能聚光器,这种聚光器能够在太阳能电池中积累的能量是传统太阳能电池的10倍。这是通过改进有机太阳能材料的效率实现的,这些材料可以更加有效地吸收太阳光谱中的...
这款工具最初由Lutz Roeder开发,后来被Red Gate Software公司收购,并不断更新迭代。 标题中的“Reflector反编译工具”指的是.NET Reflector这一软件,它是.NET开发人员的重要辅助工具。通过反编译,开发者可以...