做成功了第一个连接服务端的简单例子,现在我们来做一个客户端调用服务端方法的例子
客户端依然选择Flex
新建一个Web工程
配置好环境和配置文件
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>red5Demo1</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/red5Demo1</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=/red5Demo1
webapp.virtualHosts=*, localhost, localhost:8088, 127.0.0.1:8088
新建一个Java 类 起名 Application 继承 ApplicationAdapter
public class Application extends ApplicationAdapter {
private IScope appScope;
@Override
public boolean appConnect(IConnection conn, Object[] params) {
System.out.println(" app connect ");
return true;
}
@Override
public void appDisconnect(IConnection conn) {
System.out.println(" app disconnect ");
super.appDisconnect(conn);
}
@Override
public boolean appStart(IScope arg0) {
System.out.println(" app start ");
this.scope = arg0;
return true;
}
public String serverMethod(String str) {
System.out.println(" server method invoke.. ");
return str.toUpperCase();
}
}
其中 serverMethod 为给客户端调用的方法 该方法调用时打印一句话 并且将传入的字符串以大写形式返回给客户端
在Red5 webapps 文件夹下新建 red5Demo1 文件夹 将项目部署
启动Red5 服务器
接下来是客户端代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var rtmpurl:String = "rtmp://localhost/red5Demo1";
private var conn:NetConnection = new NetConnection();
private var isConnectSuccess:Boolean = false;
private var resp:Responder = new Responder(resFun);
private function resFun(obj:String):void {
resIn.text = obj;
}
private function invoke():void {
if(isConnectSuccess){
conn.call("serverMethod", resp , textIn.text);
}else{
Alert.show("还没连接到服务器");
}
}
private function clickConnect(e:MouseEvent):void {
conn.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
conn.connect(rtmpurl);
}
private function netStatus(e:NetStatusEvent):void {
if(e.info.code == "NetConnection.Connect.Success"){
isConnectSuccess = true;
}
}
]]>
</mx:Script>
<mx:Button x="224" y="175" label="Invoke" click="invoke()" />
<mx:TextInput x="129" y="145" width="212" id="textIn" />
<mx:Label x="129" y="119" text="" fontSize="12" width="160" id="resIn" />
<mx:Button x="129" y="175" label="Connect" click="clickConnect(event)" />
</mx:Application>
点击Connect 按钮连接上服务器
接着在输入框输入英文字母 例如 abc
点击 Invoke 按钮 即可看到 Label 中文字为输入的英文的大写字符串
到此客户端调用服务端方法的例子结束
分享到:
相关推荐
例如,无限资源的功能可以让玩家迅速建造大规模军队,快速研究高级科技;无敌或无限生命值的设定则让玩家在对抗敌人的过程中无惧损失。 不过,使用trainer 在线游戏可能会违反游戏公平竞争的规定,甚至可能导致账号...
### IBM Redbook案例研究:AIX与WebSphere在企业基础设施中的集成 IBM Redbook的这份案例研究详尽地探讨了如何在企业级架构中整合IBM的AIX操作系统和WebSphere应用服务器,尤其聚焦于与微软的Active Directory进行...
《N体问题与Nbody模拟算法解析》 在物理学领域,N体问题是一个经典而复杂的课题,它涉及多个天体之间的引力相互作用。Nbody问题的解决方案对于理解宇宙中的星系形成、恒星运动以及行星系统的演化至关重要。在这个...
本研究通过杂交配组,使用红色叶片的双单倍体(DH)系'Y005-15'与白色叶片的双单倍体系'Y011-13-38',并进行自交,构建了一个包含753个个体的F2群体,研究红叶性状的遗传模式。研究发现,红叶性状是由一个显性基因...
标题《RedTeam Security-Social Engineering Detect and Mitigate-18.pdf》和描述提到了这本书的内容是关于检测和缓解针对公司的针对性网络钓鱼(spearphishing)和物理攻击。通过这些信息,我们可以总结出以下几点...
【jbpm学习积累】 jbpm,全称是Java Business Process Management,是一款开源的工作流和业务流程管理系统,由Red Hat公司维护。它允许开发者通过模型驱动的方式来设计、执行和管理业务流程,提供了高度灵活且可...
然后,小红书推出了购物笔记,在这个社区内,消费者不仅可以观看其他人的海外购物笔记心得,还可以在社区共享平台中与笔记发布者进行交流和互动,也可以分享自己的心得体会,从而积累了大量的活跃用户,平台为他们...
5. **单片机与ARM体系结构**:熟悉单片机的基本操作以及ARM架构的特点。 6. **数字电路基础知识**:对于电路设计有一定的了解,有助于更好地理解硬件接口。 7. **ARM+Linux应用程序开发**:在具备了一定的基础之后,...
**jQuery 研究 Demo** 本 Demo 是作者在学习 jQuery 的过程中积累的成果,旨在帮助初学者更好地理解和应用 jQuery 这一强大的 JavaScript 库。jQuery 以其简洁的语法和丰富的功能,大大简化了 JavaScript 中的 DOM ...
9. **Oracle Enterprise Linux:完全二进制兼容**:Oracle Enterprise Linux与Red Hat Enterprise Linux完全二进制兼容,这意味着可以在不修改现有应用的情况下迁移至Oracle Linux。 #### 总结 Oracle Unbreakable...
标题中的"DotNET.jl:Julia:red_heart_selector:.NET"形象地表达了这个库的核心功能,即在Julia中选用并热爱.NET。 首先,我们来了解Julia。Julia是一种高性能的动态编程语言,设计用于数值计算、科学计算和数据...
心理学家Red Fiedle和他的同事们近期进行的一项研究揭示了智力和经验在不同工作压力和任务类型下的作用。他们收集了智力、经验、表现和工作压力的数据。总体来看,这些变量之间没有明显的联系。无论智商高或低,经验...
标题中的“centos积累.rar_Linux/Unix编程_GO__Linux/Unix编程_GO_”表明这是一个与CentOS操作系统、Linux/Unix编程以及Go语言相关的资源集合。这个压缩包可能包含了一系列文档或代码示例,用于帮助用户学习和理解...
FRET探针由两条相邻的探针组成,其中一条探针的5'端标记FAM,另一条的3'端标记Red 640,当探针结合到模板上时,FRET效应产生荧光。这两种探针模式都提供实时信号,提高特异性并减少假阳性。FRET探针发出的是非累积...
1. 美国麻省理工学院的研究人员开发了高效的有机太阳能聚光器,这种聚光器能够在太阳能电池中积累的能量是传统太阳能电池的10倍。这是通过改进有机太阳能材料的效率实现的,这些材料可以更加有效地吸收太阳光谱中的...
在中国,自1998年起,国家教育科研网CERNET加入了全球IPv6测试床6Bone,推动了IPv6的研究与应用。 本文主要介绍了如何在Linux环境下模拟IPv6双栈路由器,以便构建小型的IPv6网络环境。在Red Hat Linux 2.4.20-18...
- **Randy Dyess** 和 **Robert Marda**:他们在SQL Server的灾难恢复和高可用性方面有深厚的积累。 - **Sean Burke** 和 **Steve Jones**:这两位作者在SQL Server的整体架构和设计方面有着丰富的经验。 ### 四、...
#### 二、决策树算法与属性约简 决策树是一种常用的机器学习方法,它通过对数据集进行分割,形成一系列的决策规则,从而达到预测或分类的目的。决策树的主要优点包括易于理解和实现、分类速度快等。本文研究的焦点...