約 3,878,714 件
https://w.atwiki.jp/red5server/pages/39.html
Red5のオブジェクト消失条件を探ってみる。 ある意味動作検証でもあります。 この動作検証の結果としては、いまのところ問題はなかったです。 まず、コードから、 基本的なApplicationクラス(ApplicationAdapter継承)をつくって、様子をみます。 package com.taktod.red5test; import java.lang.ref.WeakReference;import java.util.HashMap;import java.util.Iterator;import java.util.Map; import org.red5.server.adapter.ApplicationAdapter;import org.red5.server.api.IClient;import org.red5.server.api.IConnection;import org.red5.server.api.IScope;import org.red5.server.api.Red5;import org.red5.server.api.stream.IBroadcastStream; /** * Red5アプリケーション * @author taktod */public class Application extends ApplicationAdapter{private int connNum;private int scopeNum;private int clientNum;private Map String, WeakReference Object dataHolder;/** * アプリケーション */public Application() {dataHolder = new HashMap String, WeakReference Object ();connNum = 0;scopeNum = 0;clientNum = 0;}/** * アプリケーションに接続したときの動作 */@Overridepublic boolean appConnect(IConnection conn, Object[] arg1) {if(conn.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}IConnection conn2 = Red5.getConnectionLocal();if(conn2.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn2.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}System.out.println("appConnect conn " + conn.getAttribute("conn") + " conn2 " + conn2.getAttribute("conn"));clearMap();return super.appConnect(conn, arg1);}/** * アプリケーションから切断したときの動作 */@Overridepublic void appDisconnect(IConnection conn) {if(conn.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}IConnection conn2 = Red5.getConnectionLocal();if(conn2.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn2.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}System.out.println("appDisconnect conn " + conn.getAttribute("conn") + " conn2 " + conn2.getAttribute("conn"));super.appDisconnect(conn);clearMap();}/** * アプリケーションに参加したときの動作? */@Overridepublic boolean appJoin(IClient client, IScope scope) {if(client.getAttribute("client") == null) {clientNum ++;Object o = new HoldData("client" + clientNum);client.setAttribute("client", o);dataHolder.put("client" + clientNum, new WeakReference Object (o));}if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("appJoin client " + client.getAttribute("client") + " scope " + scope.getAttribute("scope"));clearMap();return super.appJoin(client, scope);}/** * アプリケーションから離れたときの動作 */@Overridepublic void appLeave(IClient client, IScope scope) {if(client.getAttribute("client") == null) {clientNum ++;Object o = new HoldData("client" + clientNum);client.setAttribute("client", o);dataHolder.put("client" + clientNum, new WeakReference Object (o));}if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("appLeave client " + client.getAttribute("client") + " scope " + scope.getAttribute("scope"));super.appLeave(client, scope);clearMap();}/** * アプリケーションがはじまったときの動作 */@Overridepublic boolean appStart(IScope scope) {if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("appStart scope " + scope.getAttribute("scope"));clearMap();return super.appStart(scope);}/** * アプリケーションが停止するときの動作 */@Overridepublic void appStop(IScope scope) {if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("appStop scope " + scope.getAttribute("scope"));super.appStop(scope);clearMap();}/** * ルームに接続するときの動作 */@Overridepublic boolean roomConnect(IConnection conn, Object[] arg1) {if(conn.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}IConnection conn2 = Red5.getConnectionLocal();if(conn2.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn2.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}System.out.println("roomConnect conn " + conn.getAttribute("conn") + " conn2 " + conn2.getAttribute("conn"));clearMap();return super.roomConnect(conn, arg1);}/** * ルームから切断するときの動作 */@Overridepublic void roomDisconnect(IConnection conn) {if(conn.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}IConnection conn2 = Red5.getConnectionLocal();if(conn2.getAttribute("conn") == null) {connNum ++;Object o = new HoldData("conn" + connNum);conn2.setAttribute("conn", o);dataHolder.put("conn" + connNum, new WeakReference Object (o));}System.out.println("roomDisconnect conn " + conn.getAttribute("conn") + " conn2 " + conn2.getAttribute("conn"));super.roomDisconnect(conn);clearMap();}/** * ルームに参加するときの動作? */@Overridepublic boolean roomJoin(IClient client, IScope scope) {if(client.getAttribute("client") == null) {clientNum ++;Object o = new HoldData("client" + clientNum);client.setAttribute("client", o);dataHolder.put("client" + clientNum, new WeakReference Object (o));}if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("roomJoin client " + client.getAttribute("client") + " scope " + scope.getAttribute("scope"));clearMap();return super.roomJoin(client, scope);}/** * ルームから離れるときの動作 */@Overridepublic void roomLeave(IClient client, IScope scope) {if(client.getAttribute("client") == null) {clientNum ++;Object o = new HoldData("client" + clientNum);client.setAttribute("client", o);dataHolder.put("client" + clientNum, new WeakReference Object (o));}if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("roomLeave client " + client.getAttribute("client") + " scope " + scope.getAttribute("scope"));super.roomLeave(client, scope);clearMap();}/** * ルーム処理が始まったときの動作 */@Overridepublic boolean roomStart(IScope scope) {if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("roomStart scope " + scope.getAttribute("scope"));clearMap();return super.roomStart(scope);}/** * ルーム処理が終わったときの動作 */@Overridepublic void roomStop(IScope scope) {if(scope.getAttribute("scope") == null) {scopeNum ++;Object o = new HoldData("scope" + scopeNum);scope.setAttribute("scope", o);dataHolder.put("scope" + scopeNum, new WeakReference Object (o));}System.out.println("roomStop scope " + scope.getAttribute("scope"));super.roomStop(scope);clearMap();}/** * 放送停止イベント */@Overridepublic void streamBroadcastClose(IBroadcastStream stream) {System.out.println("streamBroadcastClose stream " + stream.getName());super.streamBroadcastClose(stream);clearMap();}/** * 放送開始イベント */@Overridepublic void streamBroadcastStart(IBroadcastStream stream) {System.out.println("streamBroadcastStart stream " + stream.getName());super.streamBroadcastStart(stream);clearMap();}/** * ライブ放送開始イベント */@Overridepublic void streamPublishStart(IBroadcastStream stream) {System.out.println("streamPublishStart stream " + stream.getName());super.streamPublishStart(stream);clearMap();}/** * レコード放送開始イベント */@Overridepublic void streamRecordStart(IBroadcastStream stream) {System.out.println("streamRecordStart stream " + stream.getName());super.streamRecordStart(stream);clearMap();}/** * マップデータを消去し内容を確認する。 * @param map */private void clearMap() {System.out.println("before " + dataHolder.keySet());System.gc();Iterator String iter = dataHolder.keySet().iterator();while(iter.hasNext()) {String key = iter.next();if(dataHolder.get(key).get() == null) {iter.remove();}}System.out.println("after " + dataHolder.keySet());}/** * 保持オブジェクトクラス */private class HoldData {private String str;public HoldData(String str) {this.str = str;}@Overridepublic String toString() {return "HoldData " + str;}}} 実行結果は以下のとおり。 かなり長いですが... 起動 appStart scope HoldData scope1 before [scope1] after [scope1] 接続1 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn1 conn2 HoldData conn1 before [scope1, conn1] after [scope1, conn1] appJoin client HoldData client1 scope HoldData scope1 before [client1, scope1, conn1] after [client1, scope1, conn1] 切断1 appDisconnect conn HoldData conn1 conn2 HoldData conn1 before [client1, scope1, conn1] after [client1, scope1, conn1] appLeave client HoldData client1 scope HoldData scope1 before [client1, scope1, conn1] after [client1, scope1, conn1] 接続2 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn2 conn2 HoldData conn2 before [client1, conn2, scope1, conn1] after [conn2, scope1] appJoin client HoldData client2 scope HoldData scope1 before [client2, conn2, scope1] after [client2, conn2, scope1] 接続3 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn3 conn2 HoldData conn3 before [client2, conn2, conn3, scope1] after [client2, conn2, conn3, scope1] appJoin client HoldData client3 scope HoldData scope1 before [client3, client2, conn2, conn3, scope1] after [client3, client2, conn2, conn3, scope1] 切断3 appDisconnect conn HoldData conn3 conn2 HoldData conn3 before [client3, client2, conn2, conn3, scope1] after [client3, client2, conn2, conn3, scope1] appLeave client HoldData client3 scope HoldData scope1 before [client3, client2, conn2, conn3, scope1] after [client3, client2, conn2, conn3, scope1] 切断2 appDisconnect conn HoldData conn2 conn2 HoldData conn2 before [client3, client2, conn2, conn3, scope1] after [client2, conn2, scope1] appLeave client HoldData client2 scope HoldData scope1 before [client2, conn2, scope1] after [client2, conn2, scope1] ルーム接続実験 接続4 roomStart scope HoldData scope2 before [client2, conn2, scope2, scope1] after [scope2, scope1] [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [Scope@519549e Depth = 2, Path = /default/test , Name = 135 ] appConnect conn HoldData conn4 conn2 HoldData conn4 before [conn4, scope2, scope1] after [conn4, scope2, scope1] appJoin client HoldData client4 scope HoldData scope1 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] roomConnect conn HoldData conn4 conn2 HoldData conn4 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] roomJoin client HoldData client4 scope HoldData scope2 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] 切断4 roomDisconnect conn HoldData conn4 conn2 HoldData conn4 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] roomLeave client HoldData client4 scope HoldData scope2 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] roomStop scope HoldData scope2 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] appDisconnect conn HoldData conn4 conn2 HoldData conn4 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] appLeave client HoldData client4 scope HoldData scope1 before [conn4, client4, scope2, scope1] after [conn4, client4, scope2, scope1] [ERROR] [NioProcessor-1] org.red5.io.amf.Input - Error loading class com.taktod.red5test.Application$HoldData 接続5 roomStart scope HoldData scope3 before [conn4, client4, scope3, scope2, scope1] after [scope3, scope1] [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [Scope@61b00766 Depth = 2, Path = /default/test , Name = 135 ] appConnect conn HoldData conn5 conn2 HoldData conn5 before [conn5, scope3, scope1] after [conn5, scope3, scope1] appJoin client HoldData client5 scope HoldData scope1 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] roomConnect conn HoldData conn5 conn2 HoldData conn5 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] roomJoin client HoldData client5 scope HoldData scope3 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] 接続6 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [Scope@61b00766 Depth = 2, Path = /default/test , Name = 135 ] appConnect conn HoldData conn6 conn2 HoldData conn6 before [conn6, conn5, client5, scope3, scope1] after [conn6, conn5, client5, scope3, scope1] appJoin client HoldData client6 scope HoldData scope1 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] roomConnect conn HoldData conn6 conn2 HoldData conn6 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] roomJoin client HoldData client6 scope HoldData scope3 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] 切断6 roomDisconnect conn HoldData conn6 conn2 HoldData conn6 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] roomLeave client HoldData client6 scope HoldData scope3 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] appDisconnect conn HoldData conn6 conn2 HoldData conn6 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] appLeave client HoldData client6 scope HoldData scope1 before [conn6, conn5, client5, client6, scope3, scope1] after [conn6, conn5, client5, client6, scope3, scope1] 切断5 roomDisconnect conn HoldData conn5 conn2 HoldData conn5 before [conn6, conn5, client5, client6, scope3, scope1] after [conn5, client5, scope3, scope1] roomLeave client HoldData client5 scope HoldData scope3 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] roomStop scope HoldData scope3 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] appDisconnect conn HoldData conn5 conn2 HoldData conn5 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] appLeave client HoldData client5 scope HoldData scope1 before [conn5, client5, scope3, scope1] after [conn5, client5, scope3, scope1] 接続7 [ERROR] [NioProcessor-1] org.red5.io.amf.Input - Error loading class com.taktod.red5test.Application$HoldData roomStart scope HoldData scope4 before [scope4, conn5, client5, scope3, scope1] after [scope4, scope1] [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [Scope@541b55f2 Depth = 2, Path = /default/test , Name = 135 ] appConnect conn HoldData conn7 conn2 HoldData conn7 before [scope4, conn7, scope1] after [scope4, conn7, scope1] appJoin client HoldData client7 scope HoldData scope1 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] roomConnect conn HoldData conn7 conn2 HoldData conn7 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] roomJoin client HoldData client7 scope HoldData scope4 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] 切断7 roomDisconnect conn HoldData conn7 conn2 HoldData conn7 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] roomLeave client HoldData client7 scope HoldData scope4 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] roomStop scope HoldData scope4 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] appDisconnect conn HoldData conn7 conn2 HoldData conn7 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] appLeave client HoldData client7 scope HoldData scope1 before [client7, scope4, conn7, scope1] after [client7, scope4, conn7, scope1] 放送開始実験 接続8 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn8 conn2 HoldData conn8 before [client7, scope4, conn7, conn8, scope1] after [conn8, scope1] appJoin client HoldData client8 scope HoldData scope1 before [client8, conn8, scope1] after [client8, conn8, scope1] 接続8視聴開始 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Remembering client buffer on stream 2000 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Remembering client buffer on stream 2000 接続9 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn9 conn2 HoldData conn9 before [client8, conn8, conn9, scope1] after [client8, conn8, conn9, scope1] appJoin client HoldData client9 scope HoldData scope1 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 放送開始 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Remembering client buffer on stream 0 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Stream start [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect streamPublishStart stream 87bc6e26-40b4-4ea3-8735-cce386d6c9de before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] streamBroadcastStart stream 87bc6e26-40b4-4ea3-8735-cce386d6c9de before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 放送停止 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Close [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect streamBroadcastClose stream 87bc6e26-40b4-4ea3-8735-cce386d6c9de before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 録画放送開始 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Remembering client buffer on stream 0 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Stream start [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Consumer connect streamRecordStart stream f8451502-48e6-45f2-84f1-3ccb5b7b8029 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] streamBroadcastStart stream f8451502-48e6-45f2-84f1-3ccb5b7b8029 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 録画放送停止 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Close [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect streamBroadcastClose stream f8451502-48e6-45f2-84f1-3ccb5b7b8029 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 録画放送開始 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Remembering client buffer on stream 0 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Stream start [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider connect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Consumer connect streamRecordStart stream 5a4ebd67-e3f3-4729-806a-6c0540bf6438 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] streamBroadcastStart stream 5a4ebd67-e3f3-4729-806a-6c0540bf6438 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 録画放送停止 [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Close [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream - Provider disconnect streamBroadcastClose stream 5a4ebd67-e3f3-4729-806a-6c0540bf6438 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 切断9 appDisconnect conn HoldData conn9 conn2 HoldData conn9 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] appLeave client HoldData client9 scope HoldData scope1 before [client8, client9, conn8, conn9, scope1] after [client8, client9, conn8, conn9, scope1] 切断8 appDisconnect conn HoldData conn8 conn2 HoldData conn8 before [client8, client9, conn8, conn9, scope1] after [client8, conn8, scope1] appLeave client HoldData client8 scope HoldData scope1 before [client8, conn8, scope1] after [client8, conn8, scope1] 接続10 [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler - Connecting to [WebScope@32e62121 Depth = 1, Path = /default , Name = test ] appConnect conn HoldData conn10 conn2 HoldData conn10 before [client8, conn10, conn8, scope1] after [conn10, scope1] appJoin client HoldData client10 scope HoldData scope1 before [conn10, client10, scope1] after [conn10, client10, scope1] 終わり 基本的な動作としては、 Red5を起動し、アプリケーションが読み込まれたら →appStart ユーザーが接続した場合 appConnect→appJoin ユーザーが切断した場合 appDisconnect→appLeave ルームに接続した場合 roomStart→appConnect→appJoin→roomConnect→roomJoin 他ユーザーがさらにルームに接続した場合 appConnect→appJoin→roomConnect→roomJoin ルームから切断した場合 roomDisconnect→roomLeave→roomStop→appDisconnect→appLeave 多数ユーザーがいる状態で切断したとき roomLeave→roomStop→appDisconnect→appLeave 放送に関して このログをみる限りは、play状態になって待機状態になると、バッファデータの取得待ちになる(特にApplicationAdapterで取得できるイベントなし) live publish状態になると streamPublishStart→streamBroadcastStart record publish状態になると streamRecordStart→streamBroadcastStart publishを停止すると streamBroadcastClose が呼ばれる。 Mapに持たせたデータによると、この検証結果によると、Client、Connection、Scopeともに、必要あれば、存在し必要なければ、きちんと消えていました。 scopeデータだけは、別でおこなった回線を無理矢理引っこ抜くや、処理上で別のユーザーにちょっかいをかける。(client.disconnectを走らせる。)重い処理を実施する。 等をおこなったときに、のこったことがありました。(詳細は気が向いたら検証します。) 以下は個人的な感想 アプリケーションを組むときの方針としては、 Joinで接続完了なので、そのあとでアプリベースのログイン処理を入れる等する。 Leaveでログアウト開始なので、はじめの時点でログアウト処理を入れる等する。 処理がおもくなったりした場合には、Red5.getConnectionLocalのデータが上書きされる可能性があるので、なるべくRed5.setConnectionLocalでただしい値に戻してから 処理を継承元に渡した方がいいかなと思います。
https://w.atwiki.jp/minigames/pages/24.html
Welcome to MiniGames Server Official Wiki! Please Vote MiniGames Server with Minecraft.jp! About this server In this server,You can enjoy many minigames and popular Minecraft gamemode! This server management by servalchan. About this Wiki This wiki introduces game mode list and how to play. This server s MainLobby picture imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。
https://w.atwiki.jp/emyu/pages/74.html
PrinceMaxHP = 1700 PrinceMaxMP = 800 KnightMaxHP = 2000 KnightMaxMP = 600 ElfMaxHP = 1200 ElfMaxMP = 1100 WizardMaxHP = 1000 WizardMaxMP = 1600 DarkelfMaxHP = 1400 DarkelfMaxMP = 1000
https://w.atwiki.jp/minecraftclassic/pages/81.html
==
https://w.atwiki.jp/chaos-server/pages/35.html
[リニューアルNonPvP-Server] Chest Shop iConomy Jobs Lockette LWC mcMMO MyHome SafeFire Tombstone DwarfForge Simple Elevators PreciousStones dynmap [NonPvP-Server] Chest Shop iConomy Jobs Lockette LWC mcMMO MyHome PetCreeper SafeFire Tombstone DwarfForge Simple Elevators [PvP Server] Jobs Chest Shop iConomy Lockette LWC MyHome PetCreeper SafeFire Tombstone mcMMO
https://w.atwiki.jp/hina-ro/
□雛Server Wiki□ 【Welcome】 【お知らせ】 【Welcome】 雛Server Wikiへようこそ。 ここではRO雛Serverの情報を公開しています。 【お知らせ】 ヽ( ・∀・)ノ ウンコー (ノ・∀・)ノ=●ウンコー!! ウンコ(*・∀・*)ホッカホカ!!
https://w.atwiki.jp/hisashis/pages/11.html
Windowsで利用しているソフトウェアの一覧 Becky! Babylon Enterprise Architect FINALDATA2007 MindManager Norton Internet Security RaQuest Rescue and Recovery VMware WinRAR 紙copi 窓使いの憂鬱 skkime Firefox
https://w.atwiki.jp/hiepitasserver/
Welcome to Minecraft冷えぴた sServer@Wiki. 第5代目サーバー稼動開始! Hiepita'sServerとは? 最新バージョン お知らせ MODバージョンごとのアイテム&レシピの違い リンク集 現在、サーバー稼働自体を停止しております。通達が遅れてしまいすいませんが、ご理解頂けたら幸いです。 第5代目サーバー稼動開始! Hiepita sServerとは? Hiepita sServerは、2012年に冷えぴたが稼動を始めた、協力プレイを主体に置いた、少人数サーバーです。 レトロゲーを想起させるドットテイストのブロックが溢れる世界で、プレイヤーは建物やその他のものを自由に創造することが本来は出来ます。(サーバー負荷になるため建設場所は教えてください) 黄昏の森を探検したり、新しい鉱石を発見したり、豆腐を作ったり、改良された農業をしたり、見たこと無いアイテムをクラフトすることで様々のものを作ることが出来ます。 やる気(気力)次第で小さな設備から、巨大な建物、IC2マスター、工業マスターまで何でもすることが出来ます。 ※このサーバーの利用の際にはマナーとBANの条件を一読ください。 Official HIEPITA sSERVER Trailer 最新バージョン ※他バージョンの方はバージョンアップ&ダウンする際、必ずバックアップを取ることを推奨します。 ■第5代目サーバー サーバー:1.6.2 MOD:1.6.2 お知らせ 冷えぴた鯖で取られた写真を投稿できます。 Minecraft絵日記~画像館~ 主のお知らせ ★鯖主からのお知らせ☆ MODバージョンごとのアイテム&レシピの違い 豆腐craftの1.6.2のバージョンアップに沿った、レシピの追加更新しました。 他MOD、スクリプトの補足等のリクエストがあれば追加します。 リンク集 Minecraft 公式サイト MOJANG MOJANG公式HP Minecraft wiki お世話になってます 冷えぴたのニコニココミュニティー たまに放送しているので是非登録お願いします。 豆腐craftの作者様ページ 作者様、相互リンクありがとう御座います。 ※編集する際は分かりやすい文章でお願いします。
https://w.atwiki.jp/hina-ro/pages/2.html
■Menu■ Top Page New Event ■Server Information■ 雛Server Rule Set Up ■Data Base■ Map NPC Mob Item Pet Costume Command @ウィキ ガイド @wiki 便利ツール @wiki
https://w.atwiki.jp/pao_d/pages/31.html
http //page.freett.com/nekoneko0123/index.html