我是Red5的新手,非常渴望知道以下内容。
我有一个应用程序,当客户端连接到它时,会创建一个子范围,然后使客户端连接到该子范围。以下代码表示:
@Override
public boolean connect(IConnection conn, IScope scope, Object[] params) {
createChildScope(scopeName);
super.connect(conn, getChildScope(scopeName), params);
return true;
}
我发现,即使将子范围作为参数传递给connect
方法,也会连接到我的应用程序的应用程序范围。
而不是super.connect(conn, getChildScope(scopeName), params);
,我尝试过:
getChildScope(scopeName).connect(conn, params);
和
conn.connect(getChildScope(scopeName), params);
但这两个都失败并返回false
。
我已经执行的测试知道正在与应用程序范围而不是子范围建立连接如下:
1)
System.out.println(getConnections().size());
System.out.println(getChildScope(scopeName).getClientConnections().size());
给出了:
1
0
2)
@Override
public boolean roomConnect(IConnection conn, Object[] params){
System.out.println("Connected to room " + conn.getScope());
return super.roomConnect(conn, params);
}
给出了:
Connected to room Scope [name=Group Discussion Server, path=/default, type=APPLICATION, autoStart=true, creationTime=1453042388349, depth=1, enabled=true, running=true]
这真的很奇怪,因为connect
方法实际上确定需要对房间范围进行连接,但是它正在应用范围内。
我尝试允许Red5服务器通过以下方式自动创建范围:
nc.connect("rtmp://Server/scopeName");
在我的Flash应用程序中,这非常合适。
请让我知道发生了什么。
谢谢。