Ubuntu 12.04 64bit或者CentOS 6.3 64bit上搭建OpenRTMFP/Cumulus服务器
2013-12-25
1.从官网下载源码包
cd ~/progrom_develop
git clone git://github.com/OpenRTMFP/Cumulus.git
tree -L 2 Cumulus
cd Culumus
现在进入该目录大致了解一下目录结构.
注意:
Cumulus是跨平台的,在生成时,都要先生成CumulusLib,再生成CumulusServer.
2.安装依赖库
Cumulus需要依赖OpenSSL, POCO, LuaJIT
下面是他们相关的主页:
http://pocoproject.org/
http://luajit.org/download.html
在Ubuntu 12.04下执行sudo apt-get install libssl-dev
或者在CentOS 6.3下面执行
yum -y install openssl-devel
下面的POCO和LuaJIT采用源码包安装方式:
wget http://pocoproject.org/releases/poco-1.4.6/poco-1.4.6p2.tar.gz(这个在CentOS 6.3上测试过,注意编译时间较长)
或者
wget https://github.com/downloads/pocoproject/poco/poco-1.4.5.tar.gz
tar zxf poco-1.4.5.tar.gz
cd poco-1.4.5
./configure
make
sudo make install
wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
tar zxf LuaJIT-2.0.2.tar.gz
cd LuaJIT-2.0.2
make
sudo make install
cd ../Cumulus
cd CumulusLib
make
cd ../CumulusServer
make
注意清除步骤刚好反过来:
cd CumulusLib
make clean
cd ../CumulusServer
make clean
3.配置并启动
在安装目录CumulusServer下面新增一个CumulusServer.ini文件来进行个性化配置,下面是可能的配置选项:
port: 默认1935, RTMFP server的默认端口,用于Cumulus server侦听进来的RTMFP请求
udpBufferSize:指定UDP接收和发送缓存的字节大小,假如你的OS的默认值小于重要的负载值,增加它的大小
threads: 指定Cumulus中线程池中线程个数,通常应大于或等于主机CPU的核数,默认会自动探测这个值,但是可能在具有CPU超线程技术的机器,或是在某些操作系统上有瑕疵.
keepAliveServer:服务器间周期性发送keep-alive保活包的秒数,默认15秒,合法值为5秒到255秒
keepAlivePeer:peer间周期性发送keep-alive保活包的秒数,默认10秒,合法值为5秒到255秒
publicAddress:客户端看到的外网地址,便于客户端重定向
servers.port: 接收进来的服务器连接的端口,注意服务器间的交互采用非加密的TCP通信,要确保安全,使用防火墙
servers.targets:在启动时要连接的CumulusServer地址列表(分号分隔),
smtp.host:配置SMTP主机去使用Cumulus提供的mail功能,默认localhost
smtp.port:配置SMTP端口去使用Cumulus提供的mail功能,默认25
smtp.timeout:配置SMTP超时会话的秒数去使用Cumulus提供的mail功能,默认60秒
logs.directory:写日志文件的目录,默认CumulusServer/logs
logs.name:日志文件的名称,默认log
下面是一个配置文件样例,它和CumulusServer放在相同的目录下面:
;CumulusServer.ini
port = 1985
udpBufferSize = 114688
keepAlivePeer = 10
keepAliveServer = 15
[logs]
name=log
directory=/home/taoyx/program_develop/Cumulus/CumulusServer/logs
启动CumulusServer:
CumulusServer包含了一些启动参数,但是默认CumulusServer在生产环境下运行是优化过的,命令行的选项在开发和测试时比较有用.为了得到启动CumulusServer时的启动参数的完整描述,请使用如下命令
./CumulusServer --help
或者
./CumulusServer -h
否则,使用管理员权限去使用
./CumulusServer
简单启动
sudo ./CumulusServer --daemon
或者
sudo ./CumulusServer --daemon --pidfile=./CumulusServer.pid
启动后发现在当前目录下,自动生成了一个www目录,和pid文件,在上层父目录生成了logs目录.
4.基本使用方法
本地Flash Client可以通过如下语句连接
var nc:NetConnection = new NetConnection();
nc.connect("rtmfp://localhost/");
RTMFP默认是采用1935端口,如果你在CumulusServer的配置文件CumulusServer.ini中特别指定了其他端口,比如12345,你必须在URL中明示该端口,请使用如下方式:
nc.connect("rtmfp://localhost:12345/");
5.扩展CumulusServer--Server Application
CumulusServer包含一个很有威力的脚本引擎(使用LUA)来生成你自己的服务器应用,它允许使用灵活的脚本方式去加入你的特定需求来扩展Cumulus的行为.
5.1生成服务器应用
CumulusServer一启动后,它会在当前目录生成一个www文件夹作为自己的root目录,假如事先不存在www的情况下.你可以在该目录下生成若干子目录,一个子目录可以描述一个服务器应用,
当客户端连接到CumulusServer时,URL的path中指定了要使用的application,比如,如下url:
rtmfp://host:port/myApplication
将在CumulusServer/www/myApplication中搜索对应的application.
首次执行时,CumulusServer在www目录中生成和执行其中的文件main.lua,然后,当新客户端到来时,已经被生成的应用将被执行,除非上次main.lua已经被修改.事实上,当你修改main.lua时,对应的
应用将以动态方式重建,无须重启服务器.
注意:root Application在CumulusServer启动时创建和启动,但是,其他的server application在第一个客户端连接时开始.
启动CumulusServer后,会在可执行文件的目录下出现一个www目录,该目录的作用,就是作为 Server Application 的默认根目录。具体的对应关系如下:
rtmfp://host:port/ -> [CumulusServer folder]/www/main.lua (root application)
rtmfp://host:port/myApplication -> [CumulusServer folder]/www/myApplication/main.lua
rtmfp://host:port/Games/myGame -> [CumulusServer folder]/www/Games/myGame/main.lua
另外要提醒的是,如果main.lua文件被修改,则不需要重启CumulusServer,因为 Server Application 的创建是一种动态的方式。
每个应用由它的path区分,它恰好就是RTMFP URL连接中path部分, 拿上面的例子来说, root application在path中是一个空字符串, 但是另两个服务器应用的path值分别是/myApplication和
/Games/myGame
下面是一个非常简单的server application,将它保存为main.lua文件,放到www下面:
function onStart(path)
print("Server application '"..path.."' started")
end
function onStop(path)
print("Server application '"..path.."' stopped")
end
6.与Flash Player交互联调
先以调试模式重新开启Cumulus,注意按照ps查找到CumulusServer的进程号,比如4123,再使用
kill -9 4123
杀死Cumulus,再使用下面的命令重启:
sudo ./CumulusServer --pidfile=./CumulusServer.pid -l8 --dump=all
然后开启使用Flex Builder生成的flash player(另见后面的博文),我们将会在控制台看到如下交互信息: