HTML5技术

“一切都是消息”--MSF(消息服务框架)入门简介 - 深蓝医生(2)

字号+ 作者:H5之家 来源:H5之家 2017-09-29 17:00 我要评论( )

MSF的设计哲学之一就是一切都是消息,所以MSF跟Actor模型有一些共同之处: Actor模型=数据+行为+消息 Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保


MSF的设计哲学之一就是“一切都是消息”,所以MSF跟Actor模型有一些共同之处:

  • Actor模型=数据+行为+消息
  • Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保证Actor内部数据只有被自己修改。
  • Remote Actor有Actor Path,例如:
  • akka://ServerSys@10.102.141.77:2552/user/SomeActor
  • MSF模型=服务+消息
  • MSF模型中服务的调用和服务的处理结果,都以消息来表示,要改变服务的状态,必须使用消息
  • MSF通过订阅一个服务,建立一个服务的实例,这些实例相当于一些Actor,它可以通过消息再调用别的Actor.
  • MSF也有Service Path,例如:
  • Service://Calculator/Add/System.Int32=1&System.Int32=2
  •  

    6,有关MSF的疑问

    我在向社区朋友们介绍MSF的时候,常常听到下面这些疑问,我想看到今天这篇文章的读者或许也有类似的疑问,所以很有必要在这里先做一个问题释疑,以便你在决定是否使用MSF的时候做一个根本性的判断,比如你要求很高性能的RPC调用,那你不适合使用MSF,因为它基于WCF,高性能不是WCF的设计目标。

    对于第2点,虽然MSF不做消息的持久化,但你可以在消息发送后或者接收后自己做这种持久化功能;

    对于第5点,如果需要做B/S的消息推送,可以使用WebSocket,而在WebServer端,它可以跟业务服务器之间使用MSF,消息由业务服务器推送到Web服务器,最后再推送到浏览器;

    对于第6点,MSF推送的不是消息,而是服务,有一位技术总监跟我争论了很久,他说服务端推送的不过是一些给客户端的数据而已,不是消息,更不是什么服务。这位总监说得没错,但我说MSF推送的是服务,只不过是对他说法的一个更加高级的抽象而已。

    我想,有一句广告词很适合来诠释我和他的分歧:

    没错,你喝的是汽水,我喝的是北冰洋!

    我不是成心要在这里给一种汽水做广告,只是觉得这个广告实在是很适合来说明我的问题。

     7,获取MSF

    MSF现在是开源软件,使用前,你需要遵守LGPL开源协议,LGPL对商业友好,你可以放心的使用,当然你可以联系我们获得技术支持。

  • 获取源码,请点击 ,未来将迁移到GitHub,敬请关注。
  • 获取程序包,请在程序包管理程序搜索 PDF.NET.MSF,如下图:
  • 查看信息,请浏览网址:https://www.nuget.org/packages?q=PDF.NET.MSF
    程序包分为客户端、服务端和宿主环境,分别是:

    8,MSF使用入门

    在当前这个入门示例中,我们首先来演示下MSF的“消息对话”功能,让MSF的客户端和服务宿主程序直接进行对话通信。

    示例步骤

    1,创建一个MSFTest解决方案,添加一个控制台项目MSFTest
    2,包管理控制台,选择该项目,然后输入:

    Install-Package PDF.Net.MSF.Service.Host

    3,在解决方案添加一个TestClient 控制台项目

    4,包管理控制台,选择该项目,然后输入:

    Install-Package PDF.Net.MSF.Client

    此时解决方案文件夹如下图:

    5,在TestClient控制台项目里面,添加如下代码:

    class Program { static void Main(string[] args) { Console.WriteLine(); Console.WriteLine(); Proxy client = new Proxy(); client.ErrorMessage += client_ErrorMessage; Console.Write(); string host = Console.ReadLine(); if (string.IsNullOrEmpty(host)) host = ; Console.WriteLine(,host); Console.Write(); string port = Console.ReadLine(); if (string.IsNullOrEmpty(port)) port = ; Console.WriteLine(, port); client.ServiceBaseUri = , host, port); Console.WriteLine(,client.ServiceBaseUri); Console.WriteLine(); ; client.SubscribeTextMessage(, serverMessage => { Console.WriteLine(); Console.WriteLine(, serverMessage); }); while (repMsg != "") { Console.Write(); repMsg = Console.ReadLine(); client.SendTextMessage(repMsg); } Console.WriteLine(); } static void client_ErrorMessage(object sender, MessageSubscriber.MessageEventArgs e) { Console.WriteLine(,e.MessageText); } }

    View Code

    6,生成MSFTest项目
    如果已经生成过,请右键菜单,重新生成项目,这一步将自动启动MSF Host。

    7,运行TestClient项目
    在服务端和客户端随意输入文字内容,服务端可以将消息推送给所有订阅此消息的客户端。

     

    如何启动MSF Host

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Redis和消息队列使用实战 - 静儿1986

      Redis和消息队列使用实战 - 静儿1986

      2017-08-22 12:00

    • 解决百度富文本编辑器 UEditor 插入视频后没有路径的问题 - 我们都是程序猿

      解决百度富文本编辑器 UEditor 插入视频后没有路径的问题 - 我们都是

      2017-08-02 13:00

    • 解决HTML5的Video标签,有部分MP4无法播放的问题 - 我们都是程序猿

      解决HTML5的Video标签,有部分MP4无法播放的问题 - 我们都是程序猿

      2017-07-26 14:00

    • HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送(C#示例) - 熊仔其人

      HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送

      2017-05-19 11:02

    网友点评
    c