(转)Red5的一般客户端连接各个事件的触发顺序
2012-09-21 15:53
246 查看
假设用户登录的地址是 rtmp://localhost/MyChatRoom/lobby/roomA 以下是事件按先后顺序排列
程序开始 appStart:MyChatRoom Start: (在RED5启动的时候会自动去启动APP,从而触发以上事件)
登录 roomStart:/lobby Start:/lobby roomStart:/lobby/roomA Start:/lobby/roomA appConnect:0 connect appJoin:0: roomConnect:0 connect:/lobby roomJoin:0:/lobby roomConnect:0 connect:/lobby/roomA roomJoin:0:/lobby/roomA 第二个用户登录 appConnect:1 connect appJoin:1: roomConnect:1 connect:/lobby roomJoin:1:/lobby roomConnect:1 connect:/lobby/roomA roomJoin:1:/lobby/roomA 第二个用户离开 roomDisconnect:1 disconnect:/lobby/roomA roomLeave:1:/lobby/roomA
roomDisconnect:1 disconnect:/lobby roomLeave:1:/lobby
appDisconnect:1 disconnect: appLeave:1: 离开 roomDisconnect:0 disconnect:/lobby/roomA roomLeave:0:/lobby/roomA
roomStop:/lobby/roomA stop:/lobby/roomA
roomDisconnect:0 disconnect:/lobby roomLeave:0:/lobby
roomStop:/lobby stop:/lobby
appDisconnect disconnect: appLeave:0:
总结: rtmp://localhost/MyChatRoom/lobby/roomA GlobalScope(default) --> WebScope(MyChatRoom) --> Scope(lobby) --> Scope(roomA) 进入时: 先从第一个Scope,lobby开始, 1,执行房间启动ApplicationMBean.roomStart(IScope lobby) 2,执行启动IScopeHandler.start(IScope lobby) 再开始到第二个Scope,roomA开始 3,执行房间启动ApplicationMBean.roomStart(IScope roomA) 4,执行启动IScopeHandler.start(IScope roomA)
5.然后开始执行ApplicationMBean.appConnect(IConnection conn,Object[] params) 6,执行IScopeHandler.connect(IConnection conn, IScope app, Object[] params) 7,然后执行ApplicationMBean.appJoin(IClient client, IScope app)
从第一个Scope,lobby开始, 8,然后执行ApplicationMBean.roomConnect(IConnection conn, Object[] params) 9,执行IScopeHandler.connect(IConnection conn, IScope lobby, Object[] params) 10,执行ApplicationMBean.roomJoin(IClient client, IScope lobby)
第二个Scope,roomA开始, 11,然后执行ApplicationMBean.roomConnect(IConnection conn, Object[] params) 12,执行IScopeHandler.connect(IConnection conn, IScope roomA, Object[] params) 13,执行ApplicationMBean.roomJoin(IClient client, IScope roomA)
当第二个用户进入同一房间时,房间不用重新建立,故从步骤5开始执行
当第二个用户离开时 从最外层的Scope(roomA)开始 1,执行ApplicationMBean.roomDisconnect(IConnection conn) 2,执行IScopeHandler.disconnect(IConnection conn, IScope roomA) 3,执行ApplicationMBean.roomLeave(IClient client, IScope roomA) 再到Scope(lobby) 4,执行ApplicationMBean.roomDisconnect(IConnection conn) 5,执行IScopeHandler.disconnect(IConnection conn, IScope lobby) 6,执行ApplicationMBean.roomLeave(IClient client, IScope lobby) 再是WebScope(MyChatRoom) 7,执行ApplicationMBean.appDisconnect(IConnection conn) 8,执行IScopeHandler.disconnect(IConnection conn, IScope app) 9,执行ApplicationMBean.appLeave(IClient client, IScope app)
当第一个,也是最后一个用户也离开的时候.情况相似. 只不过在roomLeave之后,会接着关闭这个房间 先调用ApplicationMBean.roomStop(IScope room) 再调用IScopeHandler.stop(IScope roomScope) app不会因为所有客户都不在而自动关闭.
转贴出处:http://blog.lunastudio.cn/?p=42
程序开始 appStart:MyChatRoom Start: (在RED5启动的时候会自动去启动APP,从而触发以上事件)
登录 roomStart:/lobby Start:/lobby roomStart:/lobby/roomA Start:/lobby/roomA appConnect:0 connect appJoin:0: roomConnect:0 connect:/lobby roomJoin:0:/lobby roomConnect:0 connect:/lobby/roomA roomJoin:0:/lobby/roomA 第二个用户登录 appConnect:1 connect appJoin:1: roomConnect:1 connect:/lobby roomJoin:1:/lobby roomConnect:1 connect:/lobby/roomA roomJoin:1:/lobby/roomA 第二个用户离开 roomDisconnect:1 disconnect:/lobby/roomA roomLeave:1:/lobby/roomA
roomDisconnect:1 disconnect:/lobby roomLeave:1:/lobby
appDisconnect:1 disconnect: appLeave:1: 离开 roomDisconnect:0 disconnect:/lobby/roomA roomLeave:0:/lobby/roomA
roomStop:/lobby/roomA stop:/lobby/roomA
roomDisconnect:0 disconnect:/lobby roomLeave:0:/lobby
roomStop:/lobby stop:/lobby
appDisconnect disconnect: appLeave:0:
总结: rtmp://localhost/MyChatRoom/lobby/roomA GlobalScope(default) --> WebScope(MyChatRoom) --> Scope(lobby) --> Scope(roomA) 进入时: 先从第一个Scope,lobby开始, 1,执行房间启动ApplicationMBean.roomStart(IScope lobby) 2,执行启动IScopeHandler.start(IScope lobby) 再开始到第二个Scope,roomA开始 3,执行房间启动ApplicationMBean.roomStart(IScope roomA) 4,执行启动IScopeHandler.start(IScope roomA)
5.然后开始执行ApplicationMBean.appConnect(IConnection conn,Object[] params) 6,执行IScopeHandler.connect(IConnection conn, IScope app, Object[] params) 7,然后执行ApplicationMBean.appJoin(IClient client, IScope app)
从第一个Scope,lobby开始, 8,然后执行ApplicationMBean.roomConnect(IConnection conn, Object[] params) 9,执行IScopeHandler.connect(IConnection conn, IScope lobby, Object[] params) 10,执行ApplicationMBean.roomJoin(IClient client, IScope lobby)
第二个Scope,roomA开始, 11,然后执行ApplicationMBean.roomConnect(IConnection conn, Object[] params) 12,执行IScopeHandler.connect(IConnection conn, IScope roomA, Object[] params) 13,执行ApplicationMBean.roomJoin(IClient client, IScope roomA)
当第二个用户进入同一房间时,房间不用重新建立,故从步骤5开始执行
当第二个用户离开时 从最外层的Scope(roomA)开始 1,执行ApplicationMBean.roomDisconnect(IConnection conn) 2,执行IScopeHandler.disconnect(IConnection conn, IScope roomA) 3,执行ApplicationMBean.roomLeave(IClient client, IScope roomA) 再到Scope(lobby) 4,执行ApplicationMBean.roomDisconnect(IConnection conn) 5,执行IScopeHandler.disconnect(IConnection conn, IScope lobby) 6,执行ApplicationMBean.roomLeave(IClient client, IScope lobby) 再是WebScope(MyChatRoom) 7,执行ApplicationMBean.appDisconnect(IConnection conn) 8,执行IScopeHandler.disconnect(IConnection conn, IScope app) 9,执行ApplicationMBean.appLeave(IClient client, IScope app)
当第一个,也是最后一个用户也离开的时候.情况相似. 只不过在roomLeave之后,会接着关闭这个房间 先调用ApplicationMBean.roomStop(IScope room) 再调用IScopeHandler.stop(IScope roomScope) app不会因为所有客户都不在而自动关闭.
转贴出处:http://blog.lunastudio.cn/?p=42
相关文章推荐
- Red5的一般客户端连接各个事件的触发顺序
- Button的Click事件与js函数的两种不同顺序触发方式
- 客户端触发Asp.net中服务端控件事件
- 在web页面上放了一些服务器按钮,在各个按钮的单击事件中都有代码!可不知道哪里出问题了,怎么操作都不能触发这些事件,好象代码一点都不执行!根本没办法调试!请高手指点一二!谢谢!
- 从连接触发删除事件
- 【PB】事件的触发时机及先后顺序
- 页面(Page)加载用户控件(UserControl)的事件触发顺序
- 页面(Page)加载用户控件(UserControl)的事件触发顺序
- Javascript事件触发顺序
- 事件触发顺序
- MovieClipLoader类成功加载文件时,事件触发的先手顺序。
- 客户端触发asp.net中服务器控件事件
- EventSystem的事件触发和pointer类执行顺序
- sencha touch list(列表) item(单行)单击事件触发顺序
- Android 手势事件触发及顺序
- wpf button 事件的触发顺序
- 如何触发AspxGridview的PageIndexChanged 客户端事件?
- 从零开始学_JavaScript_系列(八)——js系列<2>(事件触发顺序、文本读取、js编写ajax、输入验证、下拉菜单)
- DataSnap(MIDAS)三层架构中,常用事件及其触发顺序
- 文本框的blur与change事件触发顺序