实现的一般步骤是:

step 1: 定义NetConnection对象连接rtmp,并监听NetStatusEvent.NET_STATUS事件

step 2: 在NetStatusEvent.NET_STATUS事件里判断event.info.code=="NetConnection.Connect.Success",通过SharedObject.getRomote()得到SharedObject对象

step 3: 监听SharedObject对象的SyncEvent.SYNC事件,并sharedObj.connect(netConnection)

step 4: 这个时候可以利用sharedObj.send()向服务器发送消息,然后服务器再把登录消息广播给当前连接的所有客户端

step 5: 在SyncEvent.SYNC事件里可以取到sharedObj.data里的数据了

step 6: 定义一个供服务器调用后得到返回值的函数,需要声明为public

PS:

服务器端和客户端,都是在操作SharedObject对象,客户端是读取,服务器端是写入(只有服务器执行写入才能保证数据无误)

服务器端发送消息给每个客户端,分为客户端请求和服务器端请求实现

* 客户端请求一般是调用sharedObj.send("getServerData","message")来实现

* 服务器端是调用netConnection.call("后台方法",null,"message"),然后后台方法定义通过soUser.SendMessage("getServerData", new object[]{"message"})来发送消息

服务器端代码(.net):

using System;
using System.Collections.Generic;
using System.Text;
using FluorineFx.Messaging.Adapter;
using FluorineFx.Messaging.Api;
using FluorineFx.Messaging.Api.SO; namespace ServiceLibrary5
{
public class MyChatApp : ApplicationAdapter
{
public override bool AppConnect(IConnection connection, object[] parameters)
{
string name = parameters[0].ToString();
ISharedObject soUser = this.GetSharedObject(connection.Scope, "onlineUserList");
if (soUser == null)
{
this.CreateSharedObject(connection.Scope, "onlineUserList", false);
soUser = this.GetSharedObject(connection.Scope, "onlineUserList");
} soUser.SetAttribute(name, name); //这里是为了提供给没有parameters参数,而又需要访问连接时传过来的参数
connection.Client.SetAttribute("currentName", name);
return true;
} public override void AppDisconnect(IConnection connection)
{
string name = connection.Client.GetAttribute("currentName").ToString();
ISharedObject soUser = this.GetSharedObject(connection.Scope, "onlineUserList");
if (soUser != null)
{
soUser.RemoveAttribute(name);
} soUser.SendMessage("getServerData", new object[] { name + "已经断开" }); base.AppDisconnect(connection);
} //利用服务器端发送消息的通用方法,客户端需通过netConnection.call()来调用该方法
public void sendMessage(IConnection connection, string msg)
{
string userName = connection.Client.GetAttribute("currentName") as string; ISharedObject soUser = GetSharedObject(connection.Scope, "onlineUserList"); soUser.SendMessage("getServerData", new object[] { msg });
}
}
}

客户端代码(flex):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="0xffffff">
<mx:List x="404" y="122" backgroundColor="#3A6EA5" width="115" height="289" id="dlOnlineUsers"></mx:List>
<mx:Label x="420" y="92" text="当前在线用户" fontSize="13"/>
<mx:Label x="67" y="122" text="你的昵称:" fontSize="13"/>
<mx:TextInput id="txtName" x="134" y="123"/>
<mx:Button x="302" y="121" label="登录" click="onLogin()" fontSize="12"/>
<mx:Label x="67" y="225" text="系统信息" fontSize="13"/>
<mx:TextArea id="txtMessage" x="67" y="279" width="287" backgroundColor="#3A6EA5" color="0xffffff" />
<mx:Button x="270" y="420" label="注销" fontSize="12" click="onDisconnect()" />
<mx:Script>
<![CDATA[
private var nc:NetConnection;
private var soUser:SharedObject; private function onLogin():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
nc.connect("rtmp://localhost:8323/MyChatRoom",this.txtName.text);
nc.client = this;
} private function onNetStatus(event:NetStatusEvent):void
{
if(event.info.code == "NetConnection.Connect.Success")
{
soUser = SharedObject.getRemote("onlineUserList",nc.uri,false);
if(soUser != null)
{
soUser.addEventListener(SyncEvent.SYNC,onSYNC);
soUser.connect(nc);
soUser.client = this;
}
soUser.send("getServerData","用户【" + this.txtName.text + "】已连接");
}
} private function onDisconnect():void
{
nc.close();
} private function onSYNC(event:SyncEvent):void
{
var arrUser:Array = new Array();
for(var str:String in soUser.data)
{
arrUser.push(soUser.data[str]);
}
this.dlOnlineUsers.dataProvider = arrUser;
} public function getServerData(message:Object):void
{
this.txtMessage.text += message.toString()+"\n";
}
]]>
</mx:Script> </mx:Application>

即时通信(RPC)的Rtmp实现--代码实现篇的更多相关文章

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

    http://flexman.blog.sohu.com/129838570.html http://flexman.blog.sohu.com/130007574.html step 1: 首先要确 ...

  2. 微信小程序实现即时通信聊天功能的实例代码

    项目背景:小程序中实现实时聊天功能 一.服务器域名配置 配置流程 配置参考URL:https://developers.weixin.qq.com/miniprogram/dev/api/api-ne ...

  3. iOS开发之使用XMPPFramework实现即时通信(三)

    你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q ...

  4. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

  5. 【原】iOS学习43即时通信之XMPP(2)

    本篇是 即时通信之XMPP(2) 接上次 即时通信之XMPP(1) 1. 好友列表 1> 初始化好友花名册 // 获取管理好友的单例对象 XMPPRosterCoreDataStorage *r ...

  6. 【原】iOS学习42即时通信之XMPP(1)

    1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...

  7. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序

    转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...

  8. C语言 linux环境基于socket的简易即时通信程序

    转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html      ——By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易 ...

  9. .NET 即时通信,WebSocket服务端实例

    即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...

随机推荐

  1. Nodejs_day01

    helloworld.txt的内容: 我是nodejs 阻塞式调用 var fs = require('fs'); var data = fs.readFileSync('helloworld.txt ...

  2. 【LeetCode】202 - Happy Number

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  3. 学习Python必须要知道的常用模块

    在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分.本文为你介绍了Python中的两种常用模块. os: 这个模块包含普遍的操 ...

  4. Linux下gdb使用整理记录

    1.创建cpp文件:vim sourcefile.cpp 2.生成可执行文件:g++ -g sourcefile.cpp -o exename ------据说是要必须加上-g参数,否则不可调试 3. ...

  5. log4net--帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具

    1. log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 2. Log4net的结构如下 ...

  6. Java的平台无关性

    转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...

  7. git url ssh和https相互切换

    Changing a remote's URL The git remote set-url command changes an existing remote repository URL. Ti ...

  8. Java基础 —— 概述

    Java语言: JDK(Java Development Kit)开发工具包,提供Java的开发环境和运行环境 --> 适合于开发 JRE(Java Runtime Environment)Ja ...

  9. 微软IOC容器Unity简单代码示例2-配置文件方式

    @(编程) 1. 通过Nuget下载Unity 这个就不介绍了 2. 接口代码 namespace UnityDemo { interface ILogIn { void Login(); } } n ...

  10. 使用UIGestureRecognizer监听屏幕事件

    转载自  http://blog.csdn.net/samguoyi/article/details/7911499 如果只是想获取屏幕点击事件有一个最简单的办法,就是写一个透明的uibutton覆盖 ...