FMS服务器的相关技术.docx
《FMS服务器的相关技术.docx》由会员分享,可在线阅读,更多相关《FMS服务器的相关技术.docx(10页珍藏版)》请在冰豆网上搜索。
FMS服务器的相关技术
FMS服务器的相关技术
管理
因为FMS服务器都是基于脚本开发的,我们能做的就是监听其中的事件,然后做自己的处理。
经常会用到的功能摘录如下。
Application类
Application是FMS的基础类之一,系统的启动关闭,发布流,关闭流都会用到这个类。
方法
Application.acceptConnection()
接受一个来自客户机的至一个应用程序的连接。
Application.clearSharedObjects()
清理与当前实例相关的所有共享对象。
Application.clearStreams()
清理与当前实例相关的所有流对象。
Application.disconnect()
从服务器断开一个客户机的连接。
Application.gc()
调用垃圾收集器来回收该应用程序实例未使用的任何资源。
Application.getStats()
返回这个应用程序实例的网络状态。
Application.rejectConnection()
拒绝至一个应用程序的连接。
属性
Application.clients
只读;一个对象,该对象包含了当前连接到这个应用程序的所有客户的个列表。
Application.config
允许你访问Application.xml配置文件的ApplicationObject标签的属性。
Application.name
只读;一个应用程序实例的名字。
Application.server
只读;服务器的平台和版本。
事件
Application.onConnect
当一个客户机连接到这个应用程序时调用。
Application.onConnectAccept
当一个客户机成功的连接到这个应用程序时调用;仅用于通讯组件。
Application.onConnectReject
当一个客户机连接到这个应用程序失败时调用;仅用于通讯组件。
Application.onDisconnect
当一个客户机从这个应用程序断开连接时调用。
Application.onStatus
当一个脚本产生一个错误时调用。
Client类
主要用于和客户终端进行交互。
方法
Client.call()
在Flash客户机上异步的执行一个方法,并把值从Flash客户机返回到服务器。
Client.getBandwidthLimit()
返回客户机或服务器可以为这个连接尝试使用的最大带宽。
Client.getStats()
返回客户机的状态。
Client.readAccess()
发送一个“ping”消息至客户机。
如果客户机响应了,则这个方法返回true;否则,返回false。
Client.resolveClient.setBandwidthLimit()
设置连接的最大带宽。
为未定义过的属性提供值。
属性
Client.agent
只读;Flash客户机的版本和平台。
Client.ip
只读;Flash客户机的IP地址。
Client.protocol
只读;客户机用来连接到服务器的协议。
Client.readAccess
客户机对其拥有读访问权的一个访问级列表。
Client.referrer
只读;发起这个连接的SWF文件或服务器的URL。
Client.secure
只读;一个布尔值,指出一个Internet连接是安全的(true)还是不安全的(false)。
Client.uri
只读;由要连接到这个应用程序实例的客户机所确定的URI。
Client.virtualKey
客户机的用户代理类型(代表性的就是FlashPlayer的版本),但其可以被设置成任何合法的键值。
Client.writeAccess
客户机对其拥有写访问权的一个访问级列表。
File类
File类主要用于操作服务器上的文件,比如转移视频文件,写日志等等。
File.close()
关闭这个文件。
File.copyTo()
把一个文件拷贝到一个不同的位置或是使用一个不同的文件名拷贝到相同的位置。
File.eof()
返回一个布尔值,指出文件指针是(true)否(false)位于文件的末尾。
File.flush()
清出一个文件的输出缓冲区。
File.list()
如果这个文件是一个目录,则返回一个数组,数组中的每一个元素对应着这个目录中的每一个文件。
File.mkdir()
试图在这个文件目录中创建一个目录。
File.open()
打开一个文件以便你可以从中进行读取或对其进行写入。
File.read()
从一个文件中读取指定数量的字符并返回一个字符串。
File.readAll()
读取这个文件并返回一个数组,数组中的每一个元素对应着文件中的每一行。
File.readByte()
从这个文件中读取下一个字节并返回下一个字节的数字值,如果操作失败则返回-1。
File.readln()
从这个文件中读取下一行并作为一个字符串返回。
File.remove()
移除由File对象所指向的文件或目录。
File.renameTo()
移动或重命名一个文件。
File.write()
把数据写入到一个文件。
File.writeAll()
获取一个数组作为参数并在数据中的每一个元素上调用File.writeln()方法。
File.writeByte()
把一个字节写入到一个文件。
File.writeln()
把数据写入到一个文件并在输出最后一个参数后添加一个与平台有关的行尾字符。
getGlobal()
跳过指定数量的字节并返回新的文件位置。
File.toString()
返回一个字符串,指出File对象的名字。
属性
File.canAppend
只读;一个布尔值,指出一个文件是(true)否(false)可以为追加目的而打开。
File.canRead
只读;一个布尔值,指出一个文件是(true)否(false)可以被读取。
File.canReplace
只读;一个布尔值,指出一个文件是(true)否(false)以替换标记启用模式被打开。
File.canWrite
只读;一个布尔值,指出你是(true)否(false)可以写入到一个文件。
File.creationTime
只读;一个数据对象,包含这个文件被创建的时间。
File.exists
只读;一个布尔值,指出这个文件或目录是(true)否(false)存在。
File.isDirectory
只读;一个布尔值,指出这个文件是(true)否(false)是一个目录。
File.isFile
只读;一个布尔值,指出这个文件是(true)否(false)是一个常规数据文件。
File.isOpen
只读;一个布尔值,指出这个文件是(true)否(false)是打开的。
File.lastModified
只读;一个日期对象,包含文件最近一次被修改的时间。
File.length
只读;对于一个目录而言,是这个目录中文件的数量,当前目录和父目录条目不计算在内;对于一个文件而言,是文件中的字节数。
File.mode
只读;一个打开文件的模式。
File.name
只读;一个字符串,指出这个文件的名字。
File.position
这个文件中当前的偏移量。
File.type
只读;一个字符串,指定当一个文件被打开时所使用的编码或数据的类型。
SharedObject类
ShareObject类是一个比较重要的类,做广播消息的时候特别有用。
也可用来存储共享数据。
方法
SharedObject.clear()
删除一个永久性共享对象的所有属性。
SharedObject.close()
取消对一个共享对象的订阅。
SharedOmit()
静态的;存储一个特定的永久性共享对象实例或是存储所有被标记为dirty的共享对象实例。
SharedObject.flush()
保存一个永久性共享对象的当前状态。
SharedObject.get()
静态的;创建一个共享对象或是返回对一个现有的共享对象的引用。
SharedObject.getProperty()
获得一个共享对象属性的值。
SharedObject.lock()
锁定共享对象实例。
阻止任何来自客户机的对这个对象的改变,直到SharedObject.unlock()方法被调用。
SharedObject.send()
向订阅了这个共享对象的客户机发送一条消息。
SharedObject.setProperty()
为一个共享对象属性设置一个新值。
SharedObject.size()
返回一个共享对象中的有效属性的数量。
SharedObject.unlock()
解锁一个用SharedObject.lock()锁定的共享对象实例。
属性
SharedObject.autoCommit
一个布尔值,指出服务器是(true)否(false)周期性的提交所有永久性共享对象进行存储。
SharedObject.isDirty
一个布尔值,指出这个永久性SharedObject自上一次它被存储后是(true)否(false)已经被修改。
SharedObject.name
共享对象的名字。
SharedObject.resyncDepth
这个深度指出了什么时候一个共享对象的被删除的值应该被永久性的删除。
SharedObject.version
一个共享对象的当前版本号。
事件
SharedObject.handlerName
一个属性名的占位符,它指定了一个函数对象,当一个共享对象接收到一个广播消息,且这个广播消息的方法名匹配这个属性名时,这个函数会被调用。
SharedObject.onStatus
为一个共享对象报告错误、警告,以及状态消息。
SharedObject.onSync
当一个共享对象改变时被调用。
Stream类
属性
Stream.bufferTime
指出一个流在被播放前要用多长时间来缓冲消息。
Stream.name
一个活动流的唯一的名字。
Stream.syncWrite
一个布尔值,用来控制当流被记录时什么时候流把缓冲区中的内容写入一个FLV文件。
方法
Stream.clear()
删除之前由服务器记录的一个流。
Stream.flush()
清出一个流。
Stream.get()
静态的;返回对一个Stream对象的引用。
Stream.length()
静态的;返回一个记录的流的以秒为单位的长度。
Stream.play()
控制Stream对象的数据源。
Stream.record()
记录进入流的所有的数据。
Stream.send()
发送一个带有参数的调用至一个流的所有的订阅者。
Stream.setBufferTime()
以秒为单位设置缓冲时间的长度。
Stream.setVirtualPath()
为视频流的回放设置虚拟目录路径。
Stream.size()
静态的;以字节为单位返回流的大小。
事件
Stream.onStatus
当状态发生改变时调用。
安全
通过上面的Application类和Client的类可以非常方便的限制客户的域、来源、IP等等。
也可以通过客户连接带的参数来拒绝不合法的用户连接。
除了基础的数据连接以外,我们还可以通过FMS来调用webservice方式来验证客户的用户密码,并通过一个用户登录的随机Key来保证用户的应用是安全可靠的。
监控
通过FMS提供的API可以获取系统的各种信息。
注意:
管理员的API访问有2种方式,每个api接口都需要配置是否打开,默认都关闭:
1,客户端通过代码以rtmp、rtmpe协议进行访问
2,HTTP方式访问1111端口,以下是http方式的主要监控API整理。
请求类似:
:
1111/admin/addAdmin?
auser=aUsername&apswd=aPassword&user|username=username&pass|password=password[&scope=scope]
返回是一个xml,类似:
1.broadcastMsg:
向所有连接的客户端广播一个消息去调用所有客户端的一个指定方法。
2.gc:
强制清理回收内存,清理没有使用的stream,没有连接的服务实例,共享对象等。
3.disconnectUsers:
强制关闭指定的客户连接(通过连接id,这个会在下面api中提供)。
4.getActiveVHost:
查询活跃状态的虚拟主机。
5.getAdmins:
取得所有FMS管理员。
6.getApps:
取得FMS服务器启动的所有app
7.getAppStats,取得一个app的所有状态,包括所有历史连接数,正常总连接数,被拒绝总连接数,所有上行下行总数据量,当前连接数,连续运行时间,丢包/发包/接包数,当前上下行带宽,占用CPUcore的情况等
8.getFileCacheStats:
缓存使用情况
9.getIOStats:
FMS网络IO情况,包括上下行总数据量,数据包数,系统读、写数据量,当前的总socket连接数,总历史连接数等信息。
10.getLisenceInfo:
当前的证书信息,及该收费版本的各功能的限制,及软件版本相关信息。
11.getLiveStreams,查询当前某app的正在发布的视频流列表。
12.getLiveStreamStats:
获得当前某app中某一个直播流的参数信息,包含发布端连接id,流id,时长等。
13.getNetStreams:
获得某app当前正在被连接观看的流信息列表。
14.getNetStreamStats,获得某app某视频流的状态参数信息,包含流名称,流id,发布者连接id等。
15.getRecordedStreams:
获得正在被播放的已存在的视频流列表。
16.getRecordedStreamStats:
获得某个被播放的已存在视频流的信息,包含视频最后修改时间,文件大小,视频时长,缓存中没有的数据大小。
17.getServerStats,获得FMS的运行参数,获取包含在getIOStats返回参数基础上,多提供包含cpu占用,内存占用,使用核数,运行总时长等信息
18.getSharedObjects:
获得所有全局共享对象
19.getSharedObjectStats:
获得某共享对象的状态,包含数据量,上下行数据量,总连接数,总断开连接数,目前连接数等
20.ping:
验证目标fms是否正在正常运行。
21.reloadApp:
将某app彻底重启重新加载服务端脚本。
将会将连接到此app的连接全部断开,并且将此app占用的内存全部清空。
22.startServer,stopServer,restartServer:
启动,关闭,重启FMS。