即时通信(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>
posted @ 2010-07-15 11:55  CoderWayne  阅读(1464)  评论(0编辑  收藏  举报