即时通信(RPC)的Rtmp实现--配置篇

step 1: 首先要确定RTMP的端口,可以利用netstat -an来查看

step 2: 修改services-config.xml,确保有rtmp的相关节点:

<channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel">
 <endpoint uri="rtmp://{server.name}:8323" class="flex.messaging.endpoints.RTMPEndpoint"/>
 <properties>
  <idle-timeout-minutes>20</idle-timeout-minutes>
 </properties>
</channel-definition>

step 3: 在网站新建apps目录,并添加MyChatRoom文件夹作为应用程序目录

step 4: 定义MyChatApp类继承自FluorineFx.Messaging.Adapter.ApplicationAdapter,并定义供客户端调用的方法GetResult()

step 5: 在应用程序目录(MyChatRoom)里添加配置文件app.config,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <application-handler type="ServiceLibrary8.MyChatApp"/>
</configuration>

step 6: 新建Flex项目,分为 连接rtmp 和 调用方法 两部分来实现

服务器端:

using System;
using System.Collections.Generic;
using System.Text;
using FluorineFx.Messaging.Adapter;
namespace ServiceLibrary8
{
    public class MyChatApp : ApplicationAdapter
    {
        public string GetResult(string name, int age)
        {
            return name + "  is  " + age + " years old";
        }
    }
}

Flex端:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Button x="211" y="69" label="连接RTMP" click="onConnectClick()" />
 <mx:Button x="190" y="113" label="调用RTMP提供的方法" click="onFunctionClick()" />
 <mx:Label id="lblResult" x="230" y="31" text="Label"/>
 
 <mx:Script>
  <![CDATA[
   import mx.rpc.events.ResultEvent;
   
   private var nc:NetConnection;
   
   
   private function onConnectClick():void
   {
    nc = new NetConnection();
    nc.connect("rtmp://localhost:8323/MyChatRoom");
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
    nc.client = this;
   }
   
   private function netStatus(event:NetStatusEvent):void
   {
    var strCode:String = event.info.code;
    if(strCode=="NetConnection.Connect.Success")
    {
     this.lblResult.text = "连接RTMP成功!";
    }
    else
    {
     this.lblResult.text = "连接RTMP失败!";
    }
   }
   
   private function onFunctionClick():void
   {
    var responder:Responder = new Responder(onResult,onError);
    nc.call("GetResult",responder,"袁承志",20);
   }
   
   private function onResult(result:String):void
   {
    this.lblResult.text = "方法返回结果:" + result;
   }
   
   private function onError(event:Event):void
   {
    this.lblResult.text = "调用方法失败!";
   }
  ]]>
 </mx:Script>
 
</mx:Application>

你可能感兴趣的:(rpc)