天天看點

Red5的一般用戶端連接配接各個事件的觸發順序

假設使用者登入的位址是

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不會因為所有客戶都不在而自動關閉.