SOD开源框架MSF(消息服务框架)进阶篇

复习:在上一篇我介绍了MSF的基本订阅,模式就是,客户端A,订阅服务器。客户端B,订阅服务器。通过服务器广播消息,

所有订阅过的客户端都能接到消息。

进阶:在上一篇的基础上,增加客户端A,发送信息到服务器,服务器把接到的信息,再转发给所有订阅了的客户端。

传送门:框架的获取 http://www.cnblogs.com/bluedoctor/

医生的博客:http://www.pwmis.com/sqlmap/

正文:首先启动服务器,再单击按钮,给所有监听客户端,发送消息。按钮事件的代码如下:

  ServiceRequest request = new ServiceRequest();
            request.ServiceName = "TestSendALLClient";
            request.MethodName = "SendMsg";
            request.Parameters = new object[] {txtsend.Text};

            //异步方式测试
            Proxy serviceProxy = new Proxy();
            serviceProxy.ErrorMessage += new EventHandler<MessageSubscriber.MessageEventArgs>(serviceProxy_ErrorMessage);
            serviceProxy.ServiceBaseUri = this.txtSerivceUri.Text;

            int msgId = serviceProxy.Subscribe<string>(request, DataType.Text, (converter) =>
            {
                if (converter.Succeed)
                {
                    MyInvoke(this, () =>
                    {
                        this.lblResult.Text = converter.Result.ToString(); 

                    });
                }
                else
                {
                    MessageBox.Show(converter.ErrorMessage);
                }
            });
            if (msgId < 1)
            {
                MessageBox.Show("订阅失败");
            }
            else
            {
                this.btnServerTime.Enabled = false;
            }

        }

重点看一下这里的发送消息给服务器,ServiceName是类的名字,MethodName 是方法的名字,Parameters 是需要传给服务器的参数。

这个类、和函数是参考订阅闹钟的的功能来做的。最后在配置文件中注册刚刚写的类。运行后,看到,客户端发送的消息,已经被服务器

接收到了,并分发给订阅的客户端了。

  request.ServiceName = "TestSendALLClient";
            request.MethodName = "SendMsg";
            request.Parameters = new object[] {txtsend.Text};

   public ServiceEventSource SendMsg(string msg)
        {
            return new ServiceEventSource(timer,2,() => {
                //要初始化执行的代码或者方法

                //publishCount = 0;
                //this.AlarmTime = targetTime;
                //timer.Start();

                CurrentContext.PublishData(msg);  

                //如果上面的代码是一个执行时间比较长的方法,但又不知道何时执行完成,
                //并且不想等待超时回收服务对象,而是在执行完成后立即回收服务对象,可以调用下面的代码:
                //CurrentContext.PublishEventSource.DeActive();
                //注意:调用DeActive 方法后将会停止事件推送,所以请注意此方法调用的时机。

                //下面代码仅做测试,查看服务事件源对象的活动生命周期
                //在 ActiveLife 时间之后,一直没有事件推送,则事件源对象被视为非活动状态,发布工作线程会被回收。
                //在本例中,ActiveLife 为ServiceEventSource 构造函数的第二个参数,值为 2分钟,可以通过下面一行代码证实:
                int life = CurrentContext.PublishEventSource.ActiveLife;

                //如果上面执行的是一个执行时间比较长的方法,并且有返回值,想将返回值也推送给订阅端,可以再次执行CurrentContext.PublishData
                //CurrentContext.PublishData(DateTime.Now);

                //如果事件推送结束,需要设置事件源为非活动状态,否则,需要等待 ActiveLife 时间之后自然过期成为非活动状态。
                //如果你无法确定事件推送何时结束,请不要调用下面的方法
                //CurrentContext.PublishEventSource.DeActive();
            });
        }

      <Add Key="TestSendALLClient" InterfaceName="IService" FullClassName="ServiceSample.TestSendALLClient" Assembly="ServiceSample" />

时间: 2024-10-31 06:52:53

SOD开源框架MSF(消息服务框架)进阶篇的相关文章

消息服务框架

"一切都是消息"--MSF(消息服务框架)入门简介 "一切都是消息"--这是MSF(消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分. 1,MSF诞生的背景 MSF最初来源于2009年,我们为某银行开发的基金投资分析系统,由于银行安全的原因并且这些投资资料属于机密资料,规定必须使用邮件系统来发送这些资料,但是邮件的收发不是直接针对人,而是两端的计算机程序.为

RPC框架与分布式服务框架的区别

第一:RPC框架是点对点的通信方式,即服务消费者与服务提供者是点对点通信 第二:分布式服务框架,不近具有RPC框架的特性,同时,还包括以下特性: 1.提供多台服务器提供服务,具有负载均衡策略 2.服务自动注册,发布 3.具有服务的治理 .......

基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

分布式服务框架的热挂载以及多版本共存的简析与实现

现行的网络服务要想做大做好必须朝着分布式服务的方向去发展,比如阿里巴巴.京东这种大型的电子商务网站平台都采用了具有各自特色的分布式服务框架.分布式服务框架就是将各种服务挂载在不同的服务器上,然后进行整体的调度管理对外提供网络服务. 本博文主要讲解分布式服务的热挂载以及多版本服务共存的原理和实现,热挂载顾名思义就是在不停止框架服务进程的情况下挂载服务. 首先要实现服务的热挂载无非就是两种方式,一种是需要部署服务时候的手动操作,以及服务框架的主动监测.在这里讲解更加智能化的框架主动监测以及实现. 要

阿里巴巴分布式服务框架Dubbo介绍(1)主要特色

引言 互联网服务和BS架构的传统企业软件相比,系统规模上产生了量级的差距.例如 传统BS企业内部门户只需要考虑数百人以及几千人的访问压力,而大型互联网服务有时需要考虑的是千万甚至上亿的用户: 传统企业管理系统管理的物料信息等,可能只有数万或数十万条记录,而一个大型B2C网站的商品SKU动辄千万,考虑到商品信息更新的历史记录,商品订单记录等数据,更是天文数字. 原始的SSH+DB的BS开发模式,显然已经无法满足现代互联网服务的需要.随着企业软件不断地向云端迁移的趋势越来越明显,最终中小型企业软件系

Linux 第十一周上课笔记(1)SMTP服务进阶篇

SMTP服务部署-进阶篇 紧接着上周的内容. 一.远程登陆限制 由于当前所有虚拟机都可以远程连接实现发送邮件的服务,很明显这是步安全的. 如何实现登陆限制: 在我的客户机(desktop)上 1.cd /etc/postfix/ 在最后一行添加:拒绝登陆的ip REJECT 如:172.25.254.50 REJECT 2.postmap access #加密文件,这样会生成一个access.db文件 3.postconf -d | grep client #筛选配置项目.并查询 4. post

Alibaba开源的分布式服务框架:Dubbo是what?

  Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,      Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.关于注册中心.协议支持.服务监控等内容,详见后面描述.  Webservice也是一种服务框架,但是webservice并不是分布式的服务框

【转】Dubbo是Alibaba开源的分布式服务框架

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.关于注册中心.协议支持.服务监控等内容,详见后面描述. 总体架构 Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Serv