熟悉Linux下程序设计及各种应用程序 熟悉C Language 熟悉Glusterfs、FFmpeg、CDN 系统设计,计算机图形系统设计、分布式程序设计 目前主要研究方向:流媒体
分类: LINUX
2015-04-28 15:02:33
在MonaServer中,事件一般是以on开头的方法,例如
onStart、onStop、onConnection
当Server的app被创建的时候并且第一次执行到的时候,才会调用这个事件,这个事件的第一个参数是app的path
注意
所有的server的app是在第一个client链接过来的时候才出发的事件,只有根app是在MonaServer程序刚开始运行的时候就创建
当server的app被卸载的时候会调用这个事件,这个事件在以下3中情况中才会出现:
这个事件的第一个参数是app的path
当有新的客户端连接上来时会调用这个事件,第一个参数是Client对象, 并且这个参数依赖于对应的协议(例如RTMP、RTSP、HTTP、WebSocket均有不同)
最后你可以返回一个表发送一些信息给RTMP&RTMFP连接或者,或者重载一些配置参数:
.
function onConnection(client,...)
return {message="welcome",id=1,timeout=7}
end
ActionScript3 代码实现返回参数输出:
function onStatusEvent(event:NetStatusEvent):void {
switch(event.info.code) {
case "NetConnection.Connect.Success":
trace(event.info.message); // displays "welcome"
trace(event.info.id); // displays "1"
break;
}
}
可以拒绝客户端并加入错误信息:
function onConnection(client,login)
if login ~= "Tom" then
error("you are not Tom!")
end
end
_netConnection.connect("rtmfp://localhost/","Ben")
function onStatusEvent(event:NetStatusEvent):void {
switch(event.info.code) {
case "NetConnection.Connect.Rejected":
trace(event.info.description); // displays "you are not Tom!"
break;
}
}
在RTMP&RTFMP中的回应信息为NetConnection.Connect.Rejected 状态事件并且关闭客户端连接. 时间信息描述区域包含了错误信息。 可以拒绝一个客户端并且不给任何错误信息, event.info.description 区域会默认包含“client rejected”.
也可以再找个事件中提交一个Client的事件,类似下面::
function onConnection(client)
function client:onMessage(message)
NOTE(client.address.." says "..message)
end
end
当Client断开链接事触发这个事件,Client参数为断开链接的Client句柄。
注意
在这里你再也发送不了任何信息给客户端呢,所有的信息发送给Writer都不会有Duang。
每隔两秒钟会被触发一次, 这个事件只在MonaServer的根app下面才会出现。这个可以很容易的获得并管理objects,这个是用在必要的时候,平时可以不用。
这个事件用在p2p中,没有找到约定服务时可以重定向Client搜索的peerId。通常将Client重定向到一个或多个其他MonaServer。可以返回一个地址,或多个地址,或数组形式的地址。
function onRendezVousUnknown(protocol, peerId)
return 192.168.0.2:1935
end
function onRendezVousUnknown(protocol, peerId)
return 192.168.0.2:1935,192.168.0.3:1935
end
addresses = {192.168.0.2:1936,192.168.0.3:1936}
function onRendezVousUnknown(protocol, peerId)
return addresses
end
这个可以返回一个Server对象或者多个Servers的对象:
function onRendezVousUnknown(protocol, peerId)
return mona.servers[1] -- redirect to the first server connected
end
function onRendezVousUnknown(protocol, peerId)
return mona.servers -- redirect to all the connected servers
end
注意
当这个函数返回多个地址时,Client端会接收多个地址,并且去并行的开始尝试链接这么多个地址的Server。
在返回地址(可以多个)的重定向地址时,允许客户机重定向到另一个MonaServer。返回值与onRendezVousUnknown(Protocol, Peerid)的返回值完全相同。这个是在Client链接过来的第一数据包时触发的。第一个地址参数 是客户端的地址address, path参数表示连接的路径,properties参数是一个HTTP形式的URL的连接,和attempts参数指示尝试连接的数量 (开始1和增加在每次尝试)。
_netConnection.connect("rtmfp://localhost/myApplication?acceptableAttempts=2");
index=0
function onHandshake(address,path,properties,attempts)
if attempts > properties.acceptableAttempts then
-- This time we return all server available,
-- and it's the client who will test what is the server the faster with parallel connection
-- (first which answers wins)
return mona.servers
end
index=index+1
if index > mona.servers.count then index=1 end -- not exceed the number of server available
return mona.servers[index] -- load-balacing system!
end
注意
如果不重定向的话,可以讲这个请求发给自己
function onHandshake(address,path,properties,attempts)
return mona.servers,"again" -- redirect to the other server and my myself
end