- 浏览: 257978 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
qq820456878:
大神,您好,看了您的文章,深知小弟难望其项背啊。有一点不明白的 ...
Flex中捕获浏览器的前进、后退、刷新、关闭事件 -
skydove:
wushexin 写道楼主,详细说明网址打不开呀...可以去这 ...
RED5的Eclipse插件安装 -
JavaCFW:
JavaCFW 写道
FLEX利用FLASH MEDIA SERVER进行视频的在线录制和回放 -
JavaCFW:
FLEX利用FLASH MEDIA SERVER进行视频的在线录制和回放 -
daveyking:
客户端代码不太懂,是在哪写的?flash actionscri ...
抛弃LCDS和FMS,在tomcat下开发Red5应用(第三篇)-ApplicationAdapte
一个完整的应用过程包括(1)应用程序启动。 (2)客户端建立连接。 (3)允许/拒绝客户端连接。 (4)客户端断开连接。(5)应用程序停止。这几个基本的动作。这些动作都在ApplicationAdapter中进行了实现,我们自己写的类只需要继承该类即可。对比FMS的各个过程,具体见Red5的安装安装版的安装目录下的MigrationGuide.txt文件。该迁移向导对比了FMS和Red5在上述过程中的方法对应。
=============== ===============
FCS / FMS Red5
=============== ===============
onAppStart appStart (1)应用程序启动
roomStart
onAppStop appStop (5)应用程序停止
roomStop
onConnect appConnect (2)客户端建立连接
roomConnect
appJoin
roomJoin
onDisconnect appDisconnect (4)客户端断开连接
roomDisconnect
appLeave
roomLeave
=============== ===============
再看如何允许/拒绝客户端连接。FMS提供了方法`acceptConnection` 和`rejectConnection`进行允许和拒绝客户端连接的操作。而在Red5中,允许一个客户端连接不需要特别的操作,只需要在appConnect或roomConnect方法中返回"true"的布尔值就可以了。拒绝客户端连接,只需要调用rejectClient方法就可以了,rejectClient方法可以带一个参数以告知客户端是什么原因拒绝客户端连接。
下面我们通过一个实例来观察上述的各个过程:
假定如下场景:我们在服务器端有一个保存连接当前服务器的用户的列表,以连接时输入的用户名为标示,当有重复的用户名的客户端连接时,服务器拒绝该客户端连接,并告知客户端拒绝连接的原因。
1.修改上一篇的服务器端代码(Application.java):
package red5.example.red5server; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.red5.server.adapter.ApplicationAdapter; import org.red5.server.api.IConnection; import org.red5.server.api.IScope; import org.red5.server.api.service.IServiceCapableConnection; public class Application extends ApplicationAdapter { List userList = null; @Override public boolean appStart(IScope scope) { System.out.println("red5Server--上下文启动..."); userList = new ArrayList(); System.out.println("初始化用户列表结束..."); return super.appStart(scope); } @Override public boolean appConnect(IConnection conn, Object[] args) { System.out.println("red5Server--有客户端要建立连接..."); String userName = args[0].toString(); int cnt = 0; for (Iterator iter = userList.iterator(); iter.hasNext();) { IConnection element = (IConnection) iter.next(); if(userName.equals(element.getAttribute("userName").toString())) { rejectClient("已经有一个"+userName+"在连接中,请使用其他用户名连接..."); } cnt++; } if(cnt == userList.size()) { conn.setAttribute("userName", userName); userList.add(conn); } //if(cnt == userList.size()) return super.appConnect(conn, args); //else //return false; } @Override public void appDisconnect(IConnection conn) { System.out.println("red5Server--客户端断开连接..."); for (Iterator iter = userList.iterator(); iter.hasNext();) { IConnection element = (IConnection) iter.next(); if(element.getAttribute("userName").toString().equals(conn.getAttribute("userName").toString())) { userList.remove(element); break; } } //IServiceCapableConnection client = (IServiceCapableConnection) conn; super.appDisconnect(conn); } @Override public void appStop(IScope scope) { System.out.println("red5Server--上下文停止..."); super.appStop(scope); } }
2.编写客户端代码进行测试(red5client002.mxml):
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <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); } private function netStatus(event:NetStatusEvent):void { //txtResult.text = ""; var connStatus:String = event.info.code; //Alert.show(connStatus); txtResult.text += connStatus; if(connStatus == "NetConnection.Connect.Success") { //登录成功,不做处理 } else if(connStatus == "NetConnection.Connect.Rejected") { //登录被拒绝 txtResult.text += event.info.application; } } private function netSecurityError(event:SecurityErrorEvent):void { Alert.show("netSecurityError: " + event); } ]]> </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://localhost/red5Server"/> <mx:Button x="10" y="64" label="连接到red5服务器" width="240" click="connServer()"/> <mx:TextArea x="10" y="94" width="240" height="154" id="txtResult"/> </mx:Application>
3.启动tomcat,在浏览器输入http://localhost:8080/red5/red5client002.html ,在输入用户名的文本框中输入“testuser”,点击“连接到red5服务器”按钮,看到结果文本域显示“NetConnection.Connect.Success”,再开一个浏览器,同上操作,可以看到结果文本域里显示“NetConnection.Connect.Rejected已经有一个testuser在连接中,请使用其他用户名连接...NetConnection.Connect.Closed”。
最后停止tomcat服务器,再观察tomcat的控制台,应用上下文将整个过程的输出语句都打印了一遍,完成了整个过程。
下一篇将讲解Flex客户端和后台方法相互调用。
发表评论
-
red5加大内存的配置方式
2010-11-18 15:03 0set JAVA_OPTS=%LOGGING_OPTS% %S ... -
RED5 0.9 下载
2009-07-23 10:59 1817http://build.xuggle.com/view/St ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第八篇)-音/视频发布和订阅
2009-04-30 20:49 1856http://www.dreamtech.com.cn/SWF ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第七篇)-RSO
2009-04-29 16:28 1487点击链接查看吧,不能插入了~~ http://www.dre ... -
配合V H Screen Capture Driver共享屏幕
2009-04-10 23:40 0VH Screen Capture Driver -
RED5 v0.8 RC2 如何建立新的应用程序
2009-02-11 22:38 0参照:Chapter 11. Create new appli ... -
red5 v8.0 rc2 发布了
2009-02-11 17:51 1145http://code.google.com/p/red5/ -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第六篇)-如何使用RemoteObject
2009-01-08 14:32 4108找到这个资料Calling Java methods from ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第五篇)-客户端和服务器端方法调用的参数传递
2009-01-05 17:07 3024在上一篇演示了客户端和服务器端方法调用,其实已经一并演示了参数 ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第四篇)-客户端和服务器端的方法互相调用
2009-01-05 17:06 3665客户端和服务器端的方法相互调用比较重要,在线列表基本上全是用这 ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第二篇)-建立新的Red5应用
2009-01-04 09:56 8183网上找的文章大部分是介绍在win下安装版的Red5下新建应用程 ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第一篇)-将Red5部署到tomcat中
2009-01-04 09:55 8678有两种方法可以实现,第一种方法要覆盖tomcat的ROOT,就 ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(引子)
2009-01-04 09:52 3808使用LCDS其实主要用到了 ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第十二篇)-电子白板桌面共享
2008-12-22 16:16 0站位 http://vworkers.com/flex3/fv ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第十一篇)-电子白板协同浏览
2008-12-22 16:15 0站位 -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第十篇)-电子白板文档共享浏览
2008-12-22 15:58 0前期知识准备:(任意文档转换为SWF载入到Flex中并控制) ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第九篇)-电子白板画图篇
2008-12-18 22:24 0电子白板应该具有的功能:1.画图。2.多类型文档共享查看。3. ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第八篇)-音/视频发布和订阅
2008-12-18 16:12 0本篇介绍音频、视频的发布和订阅(相当重要的类NetStream ... -
抛弃LCDS和FMS,在tomcat下开发Red5应用(第七篇)-RSO
2008-12-16 15:45 0标题不能写那么长~~~哈哈,RSO就是RemoteShared ... -
RED5的Eclipse插件安装
2008-11-19 14:07 3958这里有详细说明:http://jira.red5.org/co ...
相关推荐
NULL 博文链接:https://tj007-bo.iteye.com/blog/299376
NULL 博文链接:https://tj007-bo.iteye.com/blog/299375
tomcat lcds 服务器 配置 学习笔记
本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建Flex的LCDS工程,并利用工具快速整合和部署J2EE项目和LCDS项目,掌握了简单的请求RemoteObject和配置的方法,初步掌握LCDS的应用之一。...
本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建Flex的LCDS工程,并利用工具快速整合和部署J2EE项目和LCDS项目,掌握了简单的请求RemoteObject和配置的方法,初步掌握LCDS的应用之一。
从官方安装包lcds31-win.exe中提取的lcds31.war。
Eclipse 3.3 + FlexBuilder3 beta2 插件版 +MyEclipse 6.0 +Lcds + Tomcat 5和以上(官方都有下载,或者google里搜一搜哈) MyEclipse:做Java开发都应该知道MyEclipse是比较好的J2EE项目的开发及部署工具的,我们...
Adobe公司LCDS注册机,适用于LCDS早期版本,学习交流之用
Flex LCDS flex.war就是lcds.war Flex+LCDS使用的war包
LiveCycle ES Developer's Guide--lcds26_devguide_040908
lcds 2.6 es 的官方开发指南,里面有详细的部署和开发说明,不过是英文版的,看起来有点吃力。
lcds.war lcds.war lcds.war lcds.war lcds.war lcds.war lcds.war lcds.war
lcds是用于来连接java数据库的哦!使用Flex 3 plugin+Eclipse+lcds 欢迎大家下载
cairngorm与lcds结合应用的最小工程包,适合研究cairngorm 与lcds的用户
Flex + LCDS +JAVA入门教程,描述了flex通过LCDS与java进行
flex需要用到的war包 flex.war lcds.war
Flex + LCDS + Java 详解
Flex+LCDS+Java入门教程,如何使用MyEclips进行配置
本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建Flex的LCDS工程,并利用工具快速整合和部署J2EE项目和LCDS项目,掌握了简单的请求RemoteObject和配置的方法,初步掌握LCDS的应用之一。
本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建Flex的LCDS工程,并利用工具快速整合和部署J2EE项目和LCDS项目,掌握了简单的请求RemoteObject和配置的方法,初步掌握LCDS的应用之一。