前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P2P RTMFP Server - MonaServer 中事件(Event)的基本使用

P2P RTMFP Server - MonaServer 中事件(Event)的基本使用

作者头像
用户3765803
发布2019-03-05 09:32:05
8770
发布2019-03-05 09:32:05
举报
文章被收录于专栏:悟空被FFmpeg玩悟空被FFmpeg玩

MonaServer 中事件(Event)的基本使用

在MonaServer中,事件一般是以on开头的方法,例如

onStart、onStop、onConnection

onStart(path)

当Server的app被创建的时候并且第一次执行到的时候,才会调用这个事件,这个事件的第一个参数是app的path

注意

所有的server的app是在第一个client链接过来的时候才出发的事件,只有根app是在MonaServer程序刚开始运行的时候就创建

onStop(path)

当server的app被卸载的时候会调用这个事件,这个事件在以下3中情况中才会出现:

  • 当对应的app下面的main.lua文件被编辑,app被重启过(也就是关闭再打开)
  • 当你删掉MonaServer对应的app时
  • 当MonaServer被停掉时

这个事件的第一个参数是app的path

onConnection(client,...)

当有新的客户端连接上来时会调用这个事件,第一个参数是Client对象, 并且这个参数依赖于对应的协议(例如RTMP、RTSP、HTTP、WebSocket均有不同)

最后你可以返回一个表发送一些信息给RTMP&RTMFP连接或者,或者重载一些配置参数:

  • timeout , 单位 秒. 可以通过配置文件进行配置

.

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

onDisconnection(client)

当Client断开链接事触发这个事件,Client参数为断开链接的Client句柄

注意

在这里你再也发送不了任何信息给客户端呢,所有的信息发送给Writer都不会有Duang。

onManage()

每隔两秒钟会被触发一次, 这个事件只在MonaServer的根app下面才会出现。这个可以很容易的获得并管理objects,这个是用在必要的时候,平时可以不用。

onRendezVousUnknown(protocol, peerId)

这个事件用在p2p中,没有找到约定服务时可以重定向Client搜索的peerId。通常将Client重定向到一个或多个其他MonaServer。可以返回一个地址,或多个地址,或数组形式的地址。

代码语言:javascript
复制
function onRendezVousUnknown(protocol, peerId)
代码语言:javascript
复制
  return 192.168.0.2:1935
代码语言:javascript
复制
end
代码语言:javascript
复制
function onRendezVousUnknown(protocol, peerId)
代码语言:javascript
复制
  return 192.168.0.2:1935,192.168.0.3:1935
代码语言:javascript
复制
end
代码语言:javascript
复制
addresses = {192.168.0.2:1936,192.168.0.3:1936}
代码语言:javascript
复制
function onRendezVousUnknown(protocol, peerId)
代码语言:javascript
复制
  return addresses
代码语言:javascript
复制
end

这个可以返回一个Server对象或者多个Servers的对象:

代码语言:javascript
复制
function onRendezVousUnknown(protocol, peerId)
代码语言:javascript
复制
  return mona.servers[1] -- redirect to the first server connected
代码语言:javascript
复制
end
代码语言:javascript
复制
function onRendezVousUnknown(protocol, peerId)
代码语言:javascript
复制
  return mona.servers -- redirect to all the connected servers
代码语言:javascript
复制
end

注意

当这个函数返回多个地址时,Client端会接收多个地址,并且去并行的开始尝试链接这么多个地址的Server。

onHandshake(address,path,properties,attempts)

在返回地址(可以多个)的重定向地址时,允许客户机重定向到另一个MonaServer。返回值与onRendezVousUnknown(Protocol, Peerid)的返回值完全相同。这个是在Client链接过来的第一数据包时触发的。第一个地址参数 是客户端的地址address, path参数表示连接的路径,properties参数是一个HTTP形式的URL的连接,和attempts参数指示尝试连接的数量 (开始1和增加在每次尝试)。

代码语言:javascript
复制
_netConnection.connect("rtmfp://localhost/myApplication?acceptableAttempts=2");
代码语言:javascript
复制
index=0
代码语言:javascript
复制
function onHandshake(address,path,properties,attempts)
代码语言:javascript
复制
  if attempts > properties.acceptableAttempts then
代码语言:javascript
复制
    -- This time we return all server available,
代码语言:javascript
复制
    -- and it's the client who will test what is the server the faster with parallel connection
代码语言:javascript
复制
    -- (first which answers wins)
代码语言:javascript
复制
    return mona.servers
代码语言:javascript
复制
  end
代码语言:javascript
复制
  index=index+1
代码语言:javascript
复制
  if index > mona.servers.count then index=1 end -- not exceed the number of server available
代码语言:javascript
复制
  return mona.servers[index] -- load-balacing system!
代码语言:javascript
复制
end

注意

如果不重定向的话,可以讲这个请求发给自己

代码语言:javascript
复制
function onHandshake(address,path,properties,attempts)
代码语言:javascript
复制
  return mona.servers,"again" -- redirect to the other server and my myself
代码语言:javascript
复制
end
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MonaServer 中事件(Event)的基本使用
    • onDisconnection(client)
      • onManage()
        • onRendezVousUnknown(protocol, peerId)
          • onHandshake(address,path,properties,attempts)
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档