在多台FMS服务器之间共享流
2009-09-04 15:22 宝宝合凤凰 阅读(462) 评论(0) 收藏 举报2008-08-22 | 在多台FMS服务器之间共享流
FMS有一个非常重要的功能,那就是可以在多台服务器之间共享流.
利用这一功能,我们可以把源服务器上的流分发到其它的服务器,这些获得流的服务器同样可以作为新的源服务器使用.这个功能有点象FMS集群.
我们都知道,利用WMP插件可以获取网上的流媒体地址制作网络电视台,其实利用Flash和FMS同样也可以实现.
在一台服务器上采集电视信号,然后将采集的流PUB到IP为127.0.0.1的一个APP(假设是:tvSet)内,假设该流的名称为"cctv1",
这样,连接到该服务器的FP客户端可以很轻易地获取该流.但连接数一多,服务器可能就会负担过重,这时就要开始考虑分流.
分流的方案至少有两种,一种是利用代理服务器,一种就是我们要说的在多台服务器之间共享流了.
那怎样把流分发下去呢?
这第一台源服务器不用再做任何事情,它只负责接收和PUB电视信号好了,我们另找一台服务器,在FMS应用程序的main.asc中写入以下代码:
//程序启动时执行
application.onAppStart = function() {
this.myNC= new NetConnection();
this.myNC.onStatus = NC_onStatus;
this.myNC.connect("rtmp://第一台源服务器的地址/tvSet");
};
function NC_onStatus(info){
switch (info.code) {
case "NetConnection.Connect.Success" :
application.myStream = Stream.get("cctv1");
application.myStream.onStatus = NS_onStatus;
if (application.myStream){
application.myStream.play("cctv1",-2, -1,false,application.myNC);
}
trace("连接成功!");
break;
case "NetConnection.Connect.Failed" :
trace("连接失败!");
break;
case "NetConnection.Connect.Rejected" :
trace("连接失败!");
break;
}
}
function NS_onStatus(info){
trace(info.code);
}
这样新的服务器就获取了与第一台源服务器同样的流.
客户端再连接的时候就不必再连接第一台源服务器而连接到新的源服务器上,新的源服务器可以是一台,也可以是多台,这样就将第一台源服务器的负担降到极小.
FMS做成的客户端动画同步(网游基础)
AS3有了新的socket方法,能够进行二进制传输,但是也没有废除AS2中的XMLSocket,下面是我用AS3中的XMLSocket实现的一个socket代码,思路基本和AS2差不多,只不过语法上有了较大变化。
代码:
package {
import flash.display.Sprite;
import flash.net.XMLSocket;
import flash.events.*;
import flash.system.System;
public class SocketExample extends Sprite
{
private var __xmlSocket:XMLSocket;
private var ip:String="192.168.2.73";
private var port:Number =4001;
public function SocketExample()
{
init();
}
public function init():void{
System.useCodePage = true;
__xmlSocket =new XMLSocket();
__xmlSocket.connect(ip,port);
configureListeners(__xmlSocket);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, dataHandler);
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
loginEvent();
}
private function loginEvent():void{
var msg:String = "login "+"test2 ";
__xmlSocket.send(msg+" n");
}
private function dataHandler(event:Event):void{
trace("dataHandler: "+ event);
}
}
}
AS3 实现socket连接
AS3有了新的socket方法,能够进行二进制传输,但是也没有废除AS2中的XMLSocket,下面是我用AS3中的XMLSocket实现的一个socket代码,思路基本和AS2差不多,只不过语法上有了较大变化。
代码:
package {
import flash.display.Sprite;
import flash.net.XMLSocket;
import flash.events.*;
import flash.system.System;
public class SocketExample extends Sprite
{
private var __xmlSocket:XMLSocket;
private var ip:String="192.168.2.73";
private var port:Number =4001;
public function SocketExample()
{
init();
}
public function init():void{
System.useCodePage = true;
__xmlSocket =new XMLSocket();
__xmlSocket.connect(ip,port);
configureListeners(__xmlSocket);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, dataHandler);
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
loginEvent();
}
private function loginEvent():void{
var msg:String = "login "+"test2 ";
__xmlSocket.send(msg+" n");
}
private function dataHandler(event:Event):void{
trace("dataHandler: "+ event);
}
}
}
浙公网安备 33010602011771号