·您当前的位置:首页 > 技术教程 > Rtmp技术 >

[RTMP]FMS在应用安全方面的限制和保护源代码实例(2)

时间:2013-02-20 11:24cnblogs.com
这里将逐行解释,他们到底在干什么 application.onConnect = function ( pClient ) { } Application.onConnect是一个事件,在任何时候只要一个客户端对服务器发出临时性的连接即被触发.对于这点,服务器必须决定是否允


这里将逐行解释,他们到底在干什么
application.onConnect = function ( pClient ) {

}
Application.onConnect是一个事件,在任何时候只要一个客户端对服务器发出临时性的连接即被触发.对于这点,服务器必须决定是否允许这个连接继续或者拒绝关闭这个连接.为这个事件创建一个函数是一个简便的方法,它让你的服务器在发生此情况的时候执行一些规则.
if ( application.clients.length >= 5 ) {
每一个程序实例都有一个数组叫“clients“,它包含引用了每一个被接收连接到程序的客户端.检查这个数组的length属性,告诉你当前连接的客户端数量.通过这个数值和你选择的数值比较,你可以设置一个极限来执行上述的代码.这里,你检测是否超过5个客户端被连接.建议 由于连接请求会触发onConnect事件也不是正式被认可的,不会把这样的(译者:发出请求的)客户端计入clients数组,即使它占据服务器的可用连接,也只是临时的
application.rejectConnection(pClient);
这个代码当在连接数超过极限5时被执行.首先它会通过pClient发送一个状态代码给客户端简要说明一下,好像这样 : “NetConnection.Connect.Rejected” 然后立即关闭临时连接.注意到前面的状态代码,等下就会看到.
} else {
application.acceptConnection(pClient);
}
这句代码当连接数在5个以下时被实行.它只不过是允许连接继续并且跟着放松一个状态代码给客户端 :
“NetConnection.Connect.Success“
这些就是所有在main.asc文件中的代码.把这个文件放入你程序的flashcom sever目录中.main.asc的内容只是在当程序第一次启动时被引用,所以如果一个你的程序实例已经在服务器上运行,就重启它.
此时,你已经为服务器在允许连接时提供了一个有力的决定,让我们在客户端提供一个方法来响应一下服务器的决定.
在你的flash文件中写下下面的函数来操作制作一个对服务器的连接.把这个函数放到你影片的第一帧,确保你在使用它时被用到:

  1. function doConnect () { 
  2. vConn_nc = new NetConnection(); 
  3. vConn_nc.connect(”rtmp://www.cuplayer.com/yourApp”); 
  4. vConn_nc.onStatus = function ( pInfo ) { 
  5. if ( pInfo.code == “NetConnection.Connect.Success” ) { 
  6. gotoAndPlay(”Start”); 
  7. } else if ( pInfo.code == “NetConnection.Connect.Failed” || 
  8. pInfo.code == “NetConnection.Connect.Rejected” ) 
  9. gotoAndPlay(”Access Denied”); 


这里还是逐行解释.
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://www.cuplayer.com/ourApp”);
当函数被调用时,一个新的NetConnection对象被创建,并且尝试着去连接你的应用程序.
vConn_nc.onStatus = function ( pInfo ) {
NetConnection.onStatus
是一个事件,在任何时候连接状态发生变化时被触发.通过建立一个函数并贴上这个事件,你的客户端文件就可以对这些变化其反应.尤其是.它能反应来自服务器决定接收或者拒绝连接结果的消息.这个由服务器提供的信息会传递到这个函数,就像一个特殊的信息对象,它就是你已经在用pInfo参数时看到过的那个
if ( pInfo.code == “NetConnection.Connect.Success” ) {
gotoAndPlay(”Start”);
如果对象pInfo的属性code显示成功连接,此客户端文件就跳到主场经中帧标签为“Start”的帧,用户可以在你的程序上开始工作.
} Else if ( pInfo.code == “NetConnection.Connect.Failed” || pInfo.code == “NetConnection.Connect.Rejected” ) {
gotoAndPlay(”Access Denied”);
这里你会对两种不同的可能作出反应.像我早前提起那样,如果服务器达到连接的极限,任何尝试连接将马上失败,并且客户端将看到 “NetConnection.Connect.Failed“状态代码.如果服务器仍然有可用的连接,但是你的程序已经达到连接极限,比如像你定义的 main.asc文件那样,那么此客户将接收到“NetConnection.Connect.Rejected“的状态代码.这里任何一种情况,客户端 文件跳到主场经中帧标签为“Access Denied”的帧,在这帧,你应该提供一个信息解释一下,连接已经达到最大的用户数,并让访问者稍后再试.
这些就是所有你需要的限制任何时间连接到你应用程序的用户数的代码.不难吧?现在让我们解释一下另一种连接控制:
密码保护.
密码保护
除了一次性控制多少人使用你的应用程序外,你还可以偶尔控制“谁“来使用你的程序.一个简单的办法来完成这项工作就是在用户允许连接前询问他们密码.让我们看看怎么来修改这个你已经创建好了的连接控制代码来检测密码.从改变你的flash文件中的doConnect()函数开始.修改的部分用粗体显示:

  1. function doConnect ( pPassword ) { 
  2. vConn_nc = new NetConnection(); 
  3. vConn_nc.connect(”rtmp://www.cuplayer.com/yourApp”, pPassword); 
  4. vConn_nc.onStatus = function ( pInfo ) { 
  5. if ( pInfo.code == “NetConnection.Connect.Success” ) { 
  6. gotoAndPlay(”Start”); 
  7. } else if ( pInfo.code == “NetConnection.Connect.Failed” || 
  8. pInfo.code == “NetConnection.Connect.Rejected” ) 
  9. if ( pInfo.application.message == “wrong password” ) { 
  10. gotoAndPlay(”Wrong Password”); 
  11. } else { 
  12. gotoAndPlay(”No Connections”); 


我们还是逐行看看修改的部分:
function doConnect ( pPassword ) {
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://yourflashcomserver.com/yourApp”, pPassword);
我们修改了这个函数使你可以传递一个密码字符作参数.这个参数叫pPassword.在你的影片中,你必须提供用户一个密码输入文本,当触发这个函数时使用这个文本内容作为密码.密码通过传递参数连接请求,发送到服务器.

  1. vConn_nc.onStatus = function ( pInfo ) { 
  2. if ( pInfo.code == “NetConnection.Connect.Success” ) { 
  3. gotoAndPlay(”Start”); 
  4. } else if ( pInfo.code == “NetConnection.Connect.Failed” || 
  5. pInfo.code == “NetConnection.Connect.Rejected” ) 
  6. if ( pInfo.application.message == “wrong password” ) { 
  7. gotoAndPlay(”Wrong Password”); 
  8. } else { 
  9. gotoAndPlay(”No Connections”); 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器