假设用户登录的地址是
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不会因为所有客户都不在而自动关闭.
分享到:
相关推荐
5. **Java Socket通信**:Java的Socket类提供了网络通信的基础,使得客户端能够与其他客户端或服务器交换数据。在这个网络画板中,每当用户绘制新的图形,服务器会接收到这个消息,并广播给所有连接的客户端。Socket...
- **服务器技术**:通常使用如Flash Media Server、Red5或Node.js等服务器端技术来处理聊天室的逻辑和数据存储。 - **协议实现**:可能需要实现简单的文本协议(如IRC)或自定义协议,以处理用户的登录、消息发送...
`defer`属性则保证脚本在HTML解析完成后,DOMContentLoaded事件触发前执行,且按照脚本在文档中的顺序。 3. `<noscript>`标签:当用户禁用了JavaScript或浏览器不支持JavaScript时,`<noscript>`标签内的内容将被...
窗体事件触发顺序 - **知识点**: 在用户交互过程中,窗体事件触发的顺序是有规律的。 - **解析**: 当用户在窗体上进行某种操作时,例如单击鼠标,会依次触发MouseDown、MouseUp、Click等事件。正确的顺序通常是:...
1. 客户端与服务器建立TCP连接。 2. 客户端可以连续发送多个请求,无需等待前一个请求的结果。 3. 服务器必须按收到请求的顺序依次返回响应。 4. 客户端主动关闭TCP连接。 5. 服务器端关闭TCP连接。 ##### POST与...
7. **事件绑定**:`on()`, `click()`, `mouseover()`等事件监听方法,可以根据用户交互触发动画。 8. **图片预加载**:为了保证动画流畅,可能需要使用预加载技术,确保图片在动画开始前已经完全加载。 9. **响应...
Ansible是一款自动化运维工具,用于应用部署、配置管理、任务执行等场景,由Red Hat公司开发和维护。Ansible的设计理念是简单易用,它主要通过SSH连接来控制和管理远程服务器,不需要在远程服务器上安装额外的客户端...
在JavaScript中,`onChange()`事件通常会在以下情况发生时触发: - 文本框中的内容发生变化 - 文本区域的内容发生变化 - 选择了列表框中的项目 - 选择了复选框 因此,选项D是正确的。 ### 19. 窗体控件的应用 **...
- 给定一组权值W={8,2,5,3,2,17,4},构建哈夫曼树的过程涉及将这些权值按照从小到大的顺序进行配对,每次选取两个最小的数合并为一个新节点,直到最后形成一个单一的根节点。 - WPL的计算是将每个叶子节点的权值...
此外,文章还提到了进度事件(progress),这是与客户端和服务器通信相关的一系列事件。包括:1. loadstart:在接收响应数据的第一个字节时触发;2. progress:在接收数据期间持续触发;3. error:请求发生错误时...
- **Unload事件:** 当窗体被关闭时,会触发Unload事件。此事件通常用于释放资源或进行清理工作。 - **Load事件:** 当窗体加载时触发。 - **LostFocus事件:** 当窗体失去焦点时触发。 - **Click事件:** 当用户...
2. **事件监听器**:可能包含了一个监听器,用于在认证过程中触发MFA事件,比如在直接授予API调用后启动MFA流程。 3. **配置文件**:项目可能包含Keycloak服务器的配置文件,用于设置自定义MFA执行器的顺序和条件。...
- **7.4 事件绑定**:AngularJS支持事件绑定,如`ng-click`、`ng-change`等,使得开发者能够轻松地响应用户事件。 - **7.5 表单控件**:AngularJS提供了丰富的表单控件指令,如`ng-model`用于双向数据绑定,`ng-...