MSF的设计哲学之一就是“一切都是消息”,所以MSF跟Actor模型有一些共同之处:
6,有关MSF的疑问
我在向社区朋友们介绍MSF的时候,常常听到下面这些疑问,我想看到今天这篇文章的读者或许也有类似的疑问,所以很有必要在这里先做一个问题释疑,以便你在决定是否使用MSF的时候做一个根本性的判断,比如你要求很高性能的RPC调用,那你不适合使用MSF,因为它基于WCF,高性能不是WCF的设计目标。
对于第2点,虽然MSF不做消息的持久化,但你可以在消息发送后或者接收后自己做这种持久化功能;
对于第5点,如果需要做B/S的消息推送,可以使用WebSocket,而在WebServer端,它可以跟业务服务器之间使用MSF,消息由业务服务器推送到Web服务器,最后再推送到浏览器;
对于第6点,MSF推送的不是消息,而是服务,有一位技术总监跟我争论了很久,他说服务端推送的不过是一些给客户端的数据而已,不是消息,更不是什么服务。这位总监说得没错,但我说MSF推送的是服务,只不过是对他说法的一个更加高级的抽象而已。
我想,有一句广告词很适合来诠释我和他的分歧:
没错,你喝的是汽水,我喝的是北冰洋!
我不是成心要在这里给一种汽水做广告,只是觉得这个广告实在是很适合来说明我的问题。
7,获取MSFMSF现在是开源软件,使用前,你需要遵守LGPL开源协议,LGPL对商业友好,你可以放心的使用,当然你可以联系我们获得技术支持。
查看信息,请浏览网址:https://www.nuget.org/packages?q=PDF.NET.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 Code6,生成MSFTest项目
如果已经生成过,请右键菜单,重新生成项目,这一步将自动启动MSF Host。
7,运行TestClient项目
在服务端和客户端随意输入文字内容,服务端可以将消息推送给所有订阅此消息的客户端。
如何启动MSF Host