Taking Control of Connections
author: Kristopher Schultz
一旦你创建使用Macromedia Flash Communication Server MX的应用程序,你也许要决定控制一下所有连
到你的程序的请求是否可能接收.这篇文章,我将展示两种普通的控制连接方法:限制连接和密码保护.
限制连接:
如果你运行超过一个flash communication server的程序,早晚你会需要限制一下连接每一个应用程序的
数量,尤其是你的程序在流行后.毕竟,你不想让你的多用户水球游戏(multiuser water balloon game)无法进行,因为你的虚拟数据程序占用了全部的服务器连接.我的处方就是对所有的通信程序作限制连接.
让我们开始,看一看当flash文件连接到flashcom server的时候到底发生了什么.除非另外指出,flashcom
server总是接收客户端发出的连接请求直到再没有更多的线路提供.如果你想改变这个行为,你需要设
定一些服务的规则,在当决定是否应该允许或者拒绝连接的时候使用.写一些服务器端的AS来达到这个任务.
设想你不想超过5个用户在同一时间连接到你的程序.在你选择的文本编辑器中创建一个新文本,并保存为
main.asc.这个main.asc文件允许你为你的通信程序增加新的能力.把下面的代码加进去:
application.onConnect = function ( pClient ) {
if ( application.clients.length >= 5 ) {
application.rejectConnection(pClient);
} else {
application.acceptConnection(pClient);
}
}
这里将逐行解释,他们到底在干什么
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文件中写下下面的函数来操作制作一个对服务器的连接.把这个函数放到你影片的第一帧,确
保你在使用它时被用到:
function doConnect () {
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://yourflashcomserver.com/yourApp”);
vConn_nc.onStatus = function ( pInfo ) {
if ( pInfo.code == “NetConnection.Connect.Success” ) {
gotoAndPlay(”Start”);
} else if ( pInfo.code == “NetConnection.Connect.Failed” ||
pInfo.code == “NetConnection.Connect.Rejected” )
{
gotoAndPlay(”Access Denied”);
}
}
}
这里还是逐行解释.
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://yourflashcomserver.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()函数开始.修改的部分用粗体显示:
function doConnect ( pPassword ) {
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://yourflashcomserver.com/yourApp”, pPassword);
vConn_nc.onStatus = function ( pInfo ) {
if ( pInfo.code == “NetConnection.Connect.Success” ) {
gotoAndPlay(”Start”);
} else if ( pInfo.code == “NetConnection.Connect.Failed” ||
pInfo.code == “NetConnection.Connect.Rejected” )
{
if ( pInfo.application.message == “wrong password” ) {
gotoAndPlay(”Wrong Password”);
} else {
gotoAndPlay(”No Connections”);
}
}
}
}
我们还是逐行看看修改的部分:
function doConnect ( pPassword ) {
vConn_nc = new NetConnection();
vConn_nc.connect(”rtmp://yourflashcomserver.com/yourApp”, pPassword);
我们修改了这个函数使你可以传递一个密码字符作参数.这个参数叫pPassword.在你的影片中,你必须提供用户一个密码输入文本,当触发这个函数时使用这个文本内容作为密码.密码通过传递参数连接请求,发送到服务器.
vConn_nc.onStatus = function ( pInfo ) {
if ( pInfo.code == “NetConnection.Connect.Success” ) {
gotoAndPlay(”Start”);
} else if ( pInfo.code == “NetConnection.Connect.Failed” ||
pInfo.code == “NetConnection.Connect.Rejected” )
{
if ( pInfo.application.message == “wrong password” ) {
gotoAndPlay(”Wrong Password”);
} else {
gotoAndPlay(”No Connections”);
}
}
}
象前面一样你仍然检测到一个成功连接.但是这次当客户接收到一个“Failed”或“Rejected”状态代码时,你必须测定是否这个失败是由于缺乏可用的连接数,还是因为用户的密码错误.
完成它,需要通过检测一个发送来自服务器的在application参数对象pInfo中自定义的消息.如果这个消息是“wrong password“,跳到主场景帧标签为“Wrong Password”的帧通知用户密码错误.另一方面,你可以采取连接失败是由于缺乏可用连接数.这种情况跳到主场景帧标签为“No Connections”的帧
但是怎么让服务器放松一个象“wrong password”那样自定义的消息呢?在你的main.asc文件,修改一下粗体显示的部分:
application.onConnect = function ( pClient, pPassword ) {
if ( application.clients.length > 5 ) {
application.rejectConnection(pClient);
} else if ( pPassword != “abc123″ ) {
var vError = new Object();
vError.message = “wrong password”;
application.rejectConnection(pClient, vError);
} else {
application.acceptConnection(pClient);
}
}
我们来看看完成的修改部分
application.onConnect = function ( pClient, pPassword ) {
在开始的函数中定义了你已经增加的参数pPassword,这样你可以使用客户端文件在试图连接时将被发送的密码字符.
If ( application.clients.length > 5 ) {
application.rejectConnection(pClient);
就象前面一样,在超过连接极限时立即拒绝连接
} Else if ( pPassword != “abc123″ ) {
var vError = new Object();
vError.message = “wrong password”;
application.rejectConnection(pClient, vError);
这段代码决定了你的密码在哪里被检测.如果用户的密码不匹配你所看到的情况-”abc123“-你必须拒绝此连接.除了简单的决定连接外,你还想提供一个自定义的消息,让客户知道拒绝是由于输入了错误的密码.通过创建一个对象,叫vError.给这个对象增加一个参数叫message,并赋值“wrong password“.通过增加一个vError对象作rejectConnection()调用时的第二个参数,它将被返回到客户端,并由你之前写好的客户端代码解释
} Else {
acceptConnection(pClient);
}
最后,如果连接通过了连接限制和密码检测,就会允许连接继续.
这些就是服务端和客户端的代码,你已经得到了两个简例,有力的控制连接到你应用程序的连接数!

转载于:https://www.cnblogs.com/AndySong/archive/2009/05/13/1456174.html

控制连接数量和密码保护-flashcom教程 密码保护相关推荐

  1. 服务器最多支持几个远程用户,服务器最大连接数量又超了?win2003系统远程桌面多用户连接设置图文教程...

    作为一个站长,登录服务器是家常便饭,是不是经常遇到过服务器超出最大连接的问题. 在windows service 2003 操作系统中,windows组件"终端服务器"与" ...

  2. python多线程_python多线程:控制线程数量

    背景 前段时间学习了python的多线程爬虫,当时爬取一个图片网站,开启多线程后,并没有限制线程的数量,也就是说,如果下载1000张图片,会一次性开启1000个子线程同时进行下载 现在希望控制线程数量 ...

  3. 如何使用 SSH 控制连接 Windows 服务器

    服务器远程连接/ssh方式连接教程(windows云主机远程登录) 如何使用 SSH 控制连接 Windows 服务器

  4. TeamViewe远程桌面软件连接移动设备的控制面板教程

    大家在工作当中可能会需要用到远程控制工具,但是有没有时间研究具体的功能要怎么用,下面介绍一款叫TeamViewer的远程控制软件,关于连接移动设备的控制面板教程. 你如果要在连接移动设备时使用连接控制 ...

  5. 怎样设置计算机访问数量,win10热点设置连接数量设置想相关方法

    小编今天带来了win10热点设置连接数量设置想相关方法,都说win10系统一个非常重要的功能,就是可以很简单的设置热点链接的数量,然而却有很多小伙伴们不知道具体的方法设置,也尝试了很多,最后还是来求助 ...

  6. iptables匹配connlimit限制并发连接数量

    以下规则将每个IP的最大并发连接数量控制在5个,使用connlimit-above或者connlimit-upto都可实现. # iptables -I INPUT -p tcp --syn --dp ...

  7. 文件共享服务器连接数问题,共享服务器上连接数量的设置

    共享服务器上连接数量的设置 内容精选 换一换 场景描述每个虚拟私有云VPC代表一个私有网络,与其他VPC逻辑隔离,您可以将业务系统部署在华为云上,构建云上私有网络环境.如果您有多个业务系统例如生产环境 ...

  8. 删除unique key,删除原有的联合主键,新建新的联合逐渐,删除索引,修改索引,mysql5.7修改索引名称,查看最大连接数量,查看是否有ssl

    mySQL中删除unique key的语法 ,假设有表: CREATE TABLE `good_booked` (   `auto_id` int(10) NOT NULL auto_incremen ...

  9. 防火墙(10)——禁止含有某些敏感字段发出去、限制连接数量(单ip地址)

    禁止敏感字段 首先我们项禁止有关page的页面输出,先看apache的网页页面里面有page,所以使用如下语法禁止查看相关字段的数据包的输出: 限制连接数量 此时我们开启三台192.168.19.12 ...

最新文章

  1. 亚马逊:从零售商向科技公司的质变
  2. Java问题解决:Java compiler level does not match the version of the installed Java project facet....
  3. php怎么四舍五入,php 四舍五入的三种实现方法
  4. TCP 的那些事儿(上)
  5. 深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现
  6. 数据库管理工具:如何使用 Navicat Premium 转储(导出)和运行(导入)*.sql 文件?
  7. C语言很难学?不不不,只需要这几步!
  8. 免费的精品: Productivity Power Tools 动画演示
  9. Java-ReentrantLock-NonfairSync/FairSync
  10. 人人都能成为安全防范的高手 ——《黑客新型攻击防范:深入剖析犯罪软件》...
  11. makefile中伪目标的理解
  12. KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]
  13. Google Earth 6 Beta版发布 (供下载地址)
  14. MATLAB三维散点图的绘制函数详解(scatter3、plot3) (有示例)
  15. mysql数据库常见分页实现思路_各种常见数据库分页实现(转)
  16. 公主同盟第3关(GBA)(难) 奥兰多西部
  17. 安知我不知死之乐”的意境
  18. PLSQL连接Oracle11g64位操作步骤
  19. 国内android第三方rom,安卓手机第三方rom大盘点,曾经火到不行,如今几乎全军覆没...
  20. 导数和微分的区别与联系

热门文章

  1. 我看ITIL在中国(六):如何建设有中国特色的IT运维管理平台【三】
  2. 我的第一本算法书(图解算法)——什么是二叉查找树
  3. 拟合公式_Graphpad Prism 8.0对散点图进行拟合
  4. python实现文件传输_Python实现基于HTTP文件传输实例
  5. Python下面向对象的三大实例
  6. Python扑克牌发牌
  7. arcgis中dem坐标定义_GIS基础-DEM Grid规则格网结构
  8. python msi installer_Windows10 MYSQL Installer 安装(mysql-installer-community-5.7.19.0.msi)
  9. python携程使用_简单了解python gevent 协程使用及作用
  10. Polkadot 0.9.2版本正式发布,对平行链启动至关重要